C语言如何随机生成一个三个位且不重叠的十六进制数

C语言如何随机生成一个三个位且不重叠的十六进制数
如何自动生成三个位的十六进制数,要把三个位置上的数分别显示出来

img

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    int a,b,c;
    //int s=0;
    srand((unsigned int)time(NULL));
    a = rand()%15+1; //生成1-15的随机数
    while(1)
    {
        b = rand()%15; //生成0-15的随机数
        if(b != a)
            break; //避免b跟a重复
    }
    //生成c
    while(1)
    {
        c = rand()%15; //生成0-15的随机数
        if(c != a && c != b)
            break;
    }
    //s = a*16*16+b*16+c;
    //printf("三个位置上的数分别是:%d %d %d\n",a,b,c);
    printf("生成的三位数十六进制分别是:%X %X %X\n",a,b,c);
    return 0;
}

从0到9,A到F随机
随机函数求余16就行了,大于9就转换到A-F

#include<stdio.h>
#include<time.h>
#include <stdlib.h>
int main()
{
    char a[] = "0123456789ABCDEF";
    char s[4] = {0},ch;
    int i=0,j=0;
    srand(time(NULL));
    for(i=0;i<3;i++)
    {
        ch = a[rand()%16];
        for(j=0;j<i;j++)
            if(s[j] == ch)
                break;
        if(j==i)
            s[i] = ch;
        else
            i--;
    }
    puts(s);
    return 0;
}


img

#include<stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
char c[16];
int j;
for(j=0;j<10;j++)
{
    c[j]=j+48;
}
for(j=10;j<16;j++)
{
    c[j]=j+55;
}
for(j=0;j<16;j++)
{
    printf("%c",c[j]);
}
srand(time(0));
int a[3];
a[0]=rand()%16,a[1]=rand()%16,a[2]=rand()%16;
printf("\n%d  %d  %d",a[0],a[1],a[2]);

printf("\n%c%c%c",c[a[0]],c[a[1]],c[a[2]]);

}