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

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

三个位且不重叠是三位不重复的数吗?用随机函数生成3个0-15的不重复数就可以了。

img

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    int x = 0;
    int i=0,dd[3],j=0,a,t;
    srand((unsigned int)time(NULL));
    for(i=0;i<3;i++)
    {
        while(1)
        {
            a = rand()%10;//生成0-9的整数
            //判断是否已经存在
            for(t=0;t<j;t++)
            {
                if(dd[t] == a)
                    break;
            }
            if(t==j)
            {
                dd[j++] = a;
                x = x*10 + a;
                break;
            }
        }
        
    }
    printf("%X",x);
    return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
    int i=0,j,d,t=8;
    char c;
    char s[4] = {0};
    char a[4] = {0};
    srand(time(NULL));
    for(i=0;i<3;i++)
    {
        d = rand()%16;
        if(d<10)
            c = d+48;
        else
            c = d+55;
        for(j=0;j<i;j++)
            if(s[i] == c)
                break;
        if(j==i)
            s[i] = c;
        else
            i--;
    }
    while(t>0)
    {
        printf("第%d次猜:",9-t);
        scanf("%s",a);
        if(strcmp(a,s)==0)
            break;
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                if(a[j] == s[i])
                {
                    if(i==j)
                        printf("数字%c位置正确数字正确\n",s[i]);
                    else
                        printf("数字%c位置不正确但数字正确\n",s[i]);
                }
            }
        }
        t--;
    }
    if(t==0)
        printf("很遗憾,8次没猜对");
    else
        printf("恭喜第%d次猜对了",9-t);
    return 0;
}