C语言如何随机生成一个三个位且不重叠的十六进制数
如何自动生成三个位的十六进制数,要把三个位置上的数分别显示出来
代码如下:
#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;
}
#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]]);
}