百科知识

输出4个随机数求纠正用c语言设计猜数字游戏该段是输出4个不重复的

2012-04-14 11:00:57奔***
用c语言设计猜数字游戏 该段是输出4个不重复的个位随机数 自己写的如下 不能保证不重复 因为调试时总出现问题所以自己找不出原因了 求改错 #include<stdio.h> #include<stdlib.h> #include<time.h> void main() { int a,b,c,d; srand(time(NULL)); int score=rand(); a=score%10; score=rand(); b=score%10; if(b==a) { printf("1\n"); while(a!=b) { score=rand(); b=score%10; } } score=rand(); c=score%10; if(c==a||c==b) { printf("2\n"); //while(!(c==a||c==b)) while(c!=a&&c!=b) { score=rand(); c=score%10; } } score=rand(); d=score%10; if(d==a||d==b||d==c) { printf("3\n"); //while(!(d==a||d==b||d==c)) while(d!=a&&d!=b&&d!=c) { score=rand(); d=score%10; } } printf("%d%d%d%d",a,b,c,d); } 输出4个随机数求纠正用c语言设计猜数字游戏该段是输出4个不重复的个位随机数自己写的如下不能保证不重复因为调试时总出现问题所以自己找不出原因了求改错#includ?

最佳回答

  •   修改后的Code,应该简洁一些。
       #define MAX_NUMBER 4 int checkDouble(int *w, int num, int rData) { int i = 0; for(i = 0; i < num; i++) { if(rData == w[i]) { return 1; } } return 0; } void main() { int data[MAX_NUMBER] = {0}; int randData = 0; int i = 0; srand(time(NULL)); data[0] = rand() % 10; printf("%d",data[0]); for(i = 1; i < MAX_NUMBER;) { randData = rand() % 10; if(checkDouble(data,i,randData) == 1) { continue; } data[i] = randData; printf(",%d",data[i]); i++; } } 。
    2012-04-24 15:57:37
  •   #include #include #include void main() { int a,b,c,d,score; srand(time(NULL)); score=rand(); a=score%10; score=rand(); b=score%10; if(b==a) { printf("1\n"); while(a==b) //a,b相同则重新选b, { score=rand(); b=score%10; } } score=rand(); c=score%10; if(c==a||c==b) { printf("2\n"); while((c==a||c==b)) //c与a或b相同则重新选C { score=rand(); c=score%10; } } score=rand(); d=score%10; if(d==a||d==b||d==c) { printf("3\n"); while((d==a||d==b||d==c)) //c与a或b,c相同则重新 //选d { score=rand(); d=score%10; } } printf("%3d%3d%3d%3d",a,b,c,d);//将数字分开, } PS:若开始出现1 2 3,说明系统相对应的出现二次选数,如1表示开始ab是相同的,通过二次选择b后才出现的。
      同理2表示c,3表示d 。
    2012-04-15 23:11:12
  • 你的程序没有错误,只是你的算法有误, 随机数是有可能出现重复的,者很正常 因此你需要一个数组,可以保存四个元素, 连续多次调用随机数发生器获得随机数,只有在当前数组中没有的时候才将新生成的随机数加入,就可确保四个随机数不会重复了
    2012-04-14 12:08:38
  • 很赞哦! (130)