我只能写出来随机生成五位数但是不能保证各个数字不相同,请问应该如何修改. ret=rand()%89999+10000
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int ret = 0;
int i = 0;
int rnd = 0;
int cnt=0;
int a,b,c,d,e;
srand((unsigned int)time(NULL));
do{
ret = rand()%89999+10000;
a = ret /10000;
b = ret /1000%10;
c = ret /100%10;
d = ret /10%10;
e = ret %10;
if(a != b && b != c && c!=d && d!=e)
break;
}while(1);
printf("%d",ret);
printf("Ganestart!\n");
while(1)
{
printf("请输入一个数:");
scanf("%d",&rnd);
cnt++;
if(rnd>ret){
printf("太大了! \n");
}else if(rnd<ret){
printf("太小了! \n");
}else{
printf("炸弹爆炸,嘭! \n");
break;
}
}
printf("共猜了%d次",cnt);
return 0;
}
生成每个数字时与已有数字比较一下就行了,有相同的话就重新生成
没有直接的方法生成,但是这个方法虽然麻烦但是通俗易懂,执行效率中等,封装到方法里就可以随意调用了
int num = 0,n1,n2,n3,n4,n5;
n1=rand() % 10;
n2 = rand() % 10;
while (n1==n2)
{
n2 = rand() % 10;
}
n3 = rand() % 10;
while (n2==n3||n1==n3)
{
n3 = rand() % 10;
}
n4 = rand() % 10;
while ( n3 == n4||n1==n4||n2==n4)
{
n4 = rand() % 10;
}
n5 = rand() % 10;
while (n4==n5 || n1 == n5 || n2 == n5 || n3 == n5)
{
n5 = rand() % 10;
}
num = n1 * 10000 + n2 * 1000 + n3 * 100 + n4 * 10 + n5;
printf("随机数num=%d", num);
有帮助的话可以点个采纳吗
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
//随机数种子
srand((unsigned int)time(NULL));
int number = 0;
int i = 0;
//创建一个数组,保存0---9
int arrRet[10]={0,1,2,3,4,5,6,7,8,9};
int length=10;
while(i < 5){
int digit = rand()%length;
number=number*10+arrRet[digit];
//调整数组
for(int j = digit;j < length-1;j++){
arrRet[j]=arrRet[j+1];
}
length--;
i++;
}
//打印数字
printf("随机生成数字:%d\n",number);
//猜数字
int retNumber;
int count = 0;
while(1){
printf("请输入你猜的数字:\n");
scanf("%d",&retNumber);
count++;
if(retNumber==number){
printf("炸弹爆炸,嘭!\n");
break;
}else if(retNumber>number){
printf("你猜的数大了\n");
}else{
printf("你猜的数小了\n");
}
}
printf("次数:%d\n",count);
return 0;
}