标题:[求助]一个小问题
只看楼主
雪依然飘
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2004-6-1
 问题点数:0 回复次数:4 
[求助]一个小问题

老师要我们做一个猜数字的游戏,想必大家也都知道这是一个什么东西了。我也做出来了,但是老师要求计算机给的四个随机数是不相同的,我弄不出,每次都是会有重复的数字出现,郁闷啊

哪位高手教教我

下面是我的程序

#include "stdio.h" #include "stdlib.h" #include "time.h" #include "string.h"

main() { int a[4], b[4], flaga[4], flagb[4], i, j, x, y, num; //a数组记录四个随机数,b数组记录用户输入的四个数,flaga表示四个随机数中哪些已被猜出,flagb表示用户四个输入哪些对了 char error; printf("现在开始猜数游戏,请按提示依次输入四个0~9的整数.您共有10次机会.\n"); srand((unsigned)time(NULL));//利用系统当前时间秒数做随机种子 for (i = 0; i < 4; i++) { a[i] = (int)( rand() / 32767.0 * 10); if (a[i+1]==a[i]) a[i+1]=(int)( rand() / 32767.0 * 10);//计算机生成四个随机数 printf("%d ",a[i]); } for ( num = 0; num < 10; num ++) { x = 0; y = 0;//结果统计清零 for (i = 0; i < 4; i++) { flaga[i] = 0;//表示该随机数尚未被猜出 flagb[i] = 0;//表示该用户输入不对 b[i] = -1; while( b[i] == -1 ) { printf("请输入您猜测的第%d个数:", i+1); scanf("%d", &b[i]); if (b[i] == -1) { printf("您输入的不是自然数,请重新输入.\n"); scanf("%s", &error); } } if (a[i]==b[i]) { x++;//数字对且位置对的个数x flaga[i] = 1;//当前随机数被猜出 flagb[i] = 1;//当前用户的输入是正确的 } } for (i = 0; i < 4; i++) { if (flaga[i] == 1) continue;//如果当前随机数已经被猜出,就比较下一个随机数 for (j = 0; j < 4; j++) { if ( (flagb[j] == 0) && (a[i] == b[j]) ) { y++;//数字对但位置不对的个数y加1 flagb[j] = 1;//表示当前输入是对的. break; } } } if (x == 4) { printf("恭喜你,猜对了!"); break; } else { printf("抱歉,您完全猜对的有%d个数,数字对而位置不对的有%d个数\n", x, y); if (num == 9) printf("对不起,您失败了."); else printf("您还有%d次机会.\n", 9-num); } } }

搜索更多相关主题的帖子: include 用户 
2004-06-01 23:16
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
得分:0 

没看你的程序,随机数不同你可以拿后来的和前面的比较,如果相同重选


我的主页 http://www.
2004-06-01 23:41
雪依然飘
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2004-6-1
得分:0 

谢谢了哦 我知道的 就是再比较一次 感觉c好难哦

以后肯定还会有很多问题打扰的 嘿嘿

2004-06-02 22:17
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h>

// create an random integer between 0 and N int randomizer(const int N) { srand((unsigned)time(NULL));//ÀûÓÃϵͳµ±Ç°Ê±¼äÃëÊý×öËæ»úÖÖ×Ó return rand()%(N+1); }

int main() { int a[4], b[4], flaga[4], flagb[4], i = 0, j, x, y, num; bool check_ok; const int N = 9; //aÊý×é¼Ç¼ËĸöËæ»úÊý,bÊý×é¼Ç¼Óû§ÊäÈëµÄËĸöÊý,flaga±íʾËĸöËæ»úÊýÖÐÄÄЩÒѱ»²Â³ö,flagb±íʾÓû§ËĸöÊäÈëÄÄЩ¶ÔÁË char error; printf("ÏÖÔÚ¿ªÊ¼²ÂÊýÓÎÏ·,Çë°´ÌáʾÒÀ´ÎÊäÈëËĸö0~9µÄÕûÊý.Äú¹²ÓÐ10´Î»ú»á.\n"); a[i] = randomizer(N); do { i++; do { a[i] = randomizer(N); check_ok = true; for(j = i-1; j>=0; j--) { if(a[i] == a[j]) { check_ok = false; break; } } }while(check_ok==false); }while(i!=3); for(i = 0; i<4; i++) { printf("%d ", a[i]); }

for ( num = 0; num < 10; num ++) { x = 0; y = 0;//½á¹ûͳ¼ÆÇåÁã for (i = 0; i < 4; i++) { flaga[i] = 0;//±íʾ¸ÃËæ»úÊýÉÐδ±»²Â³ö flagb[i] = 0;//±íʾ¸ÃÓû§ÊäÈë²»¶Ô b[i] = -1; while( b[i] == -1 ) { printf("ÇëÊäÈëÄú²Â²âµÄµÚ%d¸öÊý:", i+1); scanf("%d", &b[i]); if (b[i] == -1) { printf("ÄúÊäÈëµÄ²»ÊÇ×ÔÈ»Êý,ÇëÖØÐÂÊäÈë.\n"); scanf("%s", &error); } } if (a[i]==b[i]) { x++;//Êý×Ö¶ÔÇÒλÖöԵĸöÊýx flaga[i] = 1;//µ±Ç°Ëæ»úÊý±»²Â³ö flagb[i] = 1;//µ±Ç°Óû§µÄÊäÈëÊÇÕýÈ·µÄ } } for (i = 0; i < 4; i++) { if (flaga[i] == 1) continue;//Èç¹ûµ±Ç°Ëæ»úÊýÒѾ­±»²Â³ö,¾Í±È½ÏÏÂÒ»¸öËæ»úÊý for (j = 0; j < 4; j++) { if ( (flagb[j] == 0) && (a[i] == b[j]) ) { y++;//Êý×Ö¶Ôµ«Î»Öò»¶ÔµÄ¸öÊýy¼Ó1 flagb[j] = 1;//±íʾµ±Ç°ÊäÈëÊǶԵÄ. break; } } } if (x == 4) { printf("¹§Ï²Äã,²Â¶ÔÁË!"); break; } else { printf("±§Ç¸,ÄúÍêÈ«²Â¶ÔµÄÓÐ%d¸öÊý,Êý×Ö¶Ô¶øλÖò»¶ÔµÄÓÐ%d¸öÊý\n", x, y); if (num == 9) printf("¶Ô²»Æð,Äúʧ°ÜÁË."); else printf("Äú»¹ÓÐ%d´Î»ú»á.\n", 9-num); } } return 0; }


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-06-02 23:43
陈勃
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-6-5
得分:0 

4楼的,我本来就不会,你写的这些

ÄúÍêÈ«²Â¶ÔµÄÓÐ%d¸öÊý,Êý×Ö¶Ô¶øλÖò»¶ÔµÄÓÐ%d¸öÊý

是什么东东啊?~~??~?~~?~?~??~


我笨但我用功
2004-06-05 10:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-1909-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047548 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved