c++随机生成20个1到100的数,安从大到小排列,分别显示排列前和排列后的结果

运行无错,但生成数列重复。
c++随机生成20个1到100的数,安从大到小排列,分别显示排列前和排列后的结果

//c++随机生成20个1到100的数,安从大到小排列,分别显示排列前和排列后的结果
#include <iostream>
using namespace std;
#include <time.h>
int main()
{
    srand(time(NULL));
    int a[20],i,j,t;
    for(i=0;i<20;i++)
    {
        a[i] = rand()%100+1;
        cout<<a[i]<<" ";
    }
    cout<<endl;
    for(i=0;i<19;i++)
        for(j=0;j<19-i;j++)
        {
            if(a[j] < a[j+1])
            {
                t  =a[j];
                a[j] = a[j+1];
                a[j+1] = t;
        }
    for(i=0;i<20;i++)
        cout<<a[i]<<" ";
}

代码呢?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, t;
    char num[20];
    srand(time(NULL)); // 初始化随机数种子
    printf("排序前:");
    for(i=0; i<20; i++) {
        num[i] = rand() % 100 + 1; // 生成1~100的随机数
        printf("%d", num[i]);
        if(i == 19)
            printf("\n");
        else
            printf(" ");
    }
    for(i=0; i<20; i++) { // 冒泡排序
        for(j=0; j<20-i-1; j++) {
            if(num[j] > num[j+1]) {
                t = num[j];
                num[j] = num[j+1];
                num[j+1] = t;
            }
        }
    }
    printf("排序后:");
    for(i=0; i<20; i++) {
        printf("%d", num[i]);
        if(i == 19)
            printf("\n");
        else
            printf(" ");
    }
    return 0;
}