标题:[求助]我看了要求自己做的猜数游戏
只看楼主
走火
Rank: 1
等 级:新手上路
帖 子:426
专家分:0
注 册:2005-12-28
 问题点数:0 回复次数:5 
[求助]我看了要求自己做的猜数游戏



下面是我根据题意写的程序.

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

/*这个函数用来设定答案,并保证4个数字不重复.*/

void shizhi(char x[4])
{ int i=0,j=1;
char tmp;
x[i]=random(10)+48;
while(j<4)
{ tmp=random(10)+48;
for(i=0;i<j;i++)
if (tmp==x[i]) break;
if(i==j) {x[j]=tmp; j++;}
}
}

void main()
{ char daan[5],fankui[5];
int i,j,csum=0,asum=0,bsum=0;
/*csum是次数计数器,asum和bsum是A与B的次数*/
daan[4]='\0'; fankui[4]='\0';

/*daan是出题者设定的,fankui是用户返回的数据.*/

clrscr();
srand(time(NULL));
shizhi(daan);
printf("qing shu ru ni cai de su,shu ru QUIT tui chu.\n");
scanf("%s",fankui);
csum++;
while(strcmp(fankui,"QUIT"))
{ for(i=0;i<4;i++)
{if (daan[i]==fankui[i]) asum++;
else
for(j=0;j<4;j++)
if (daan[i]==fankui[j]) {bsum++; break;}
}
printf("%dA%dB\n",asum,bsum);
if (asum==4) break;

printf("qing shu ru ni cai de su,shu ru QUIT tui chu.\n");
scanf("%s",fankui);
csum++;
asum=0; bsum=0; /*把次数设为0,以方便下次计数*/
}


printf("daan=%s fankui=%s ni cai le %d ci.",daan,fankui,csum);
getch();
}



这是我测试程序时,自己猜的结果,我猜了20次.....




生成重复字符问题已解决

[此贴子已经被作者于2006-9-5 11:57:25编辑过]



FokoE9fk.bmp (886.69 KB)
搜索更多相关主题的帖子: 游戏 tmp void main 
2006-09-05 10:10
走火
Rank: 1
等 级:新手上路
帖 子:426
专家分:0
注 册:2005-12-28
得分:0 
我英语垃圾,拼音也差,打字用五笔.
上面的提示如有错误,请大家见谅.

我是一只小菜鸟,请大家多多照顾! QQ 87135637
2006-09-05 10:20
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

#include<stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 4
#define M 8

int is_in(int a[],int n)
{
int i ;
for(i=0;i<N;i++)
if(a[i]==n)return(1);
return(0);
}
int same(int a[],int b[])
{
int i,count=0 ;
for(i=0;i<N;i++)
if(a[i]==b[i])count++;
return(count);
}

int sum(int a[],int b[])
{
int i,j,count=0 ;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(a[i]==b[j])
{
count++;
break ;
}
return(count);
}

void guess(int a[])
{
int i=0,j=0,k=0,t=0,b[N];
for(i=1;i<=M;i++)
{
printf("input N(N=4) numbers:");
for(j=0;j<N;j++)
scanf("%d",&b[j]);
k=same(a,b);
t=sum(a,b);
printf("%d %dA %dB\n",i,k,t-k);
if(k==N)
{
printf("祝贺您!\n");
break ;
}
}
if(i>M)
{
printf("失败!\n");
for(j=0;j<N;j++)
printf("%d ",a[j]);
printf("\n");
}
}

void main()
{
int i,t,a[N];
srand(time(NULL));
printf("****************************************\n\n");
printf("欢迎您!游戏开始!\n\n");
printf("游戏简介:输入4个数字(0-9),以空格隔开.\n系统自动提示您猜对几个数字,如:");
printf("2A 1B\n则说明您已经猜对3个数字,并且有2位位置\n是正确的.您只有%d次机会.",M);
printf("祝您好运!\n\n");
printf("****************************************\n\n");

for(i=0;i<N;i++)
a[i]=-1 ;
i=0 ;
//产生不同的随机数
while(i<N)
{
t=rand()%10 ;
if(is_in(a,t)==0)
{
a[i]=t ;
i++;
}
}
guess(a);
//猜字游戏
}


倚天照海花无数,流水高山心自知。
2006-09-05 10:34
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

我用你的程序猜了6次的时候出现3A1B,我就很纳闷,按你的题目来说应该没有这样的情况.
后来我看你的程序,发现并没有生成不同的4个数据,当然这样猜的确很麻烦.
楼主的程序值得借鉴的是用字符串处理,并且可以用QUIT退出,相比之下,我的太菜了


倚天照海花无数,流水高山心自知。
2006-09-05 10:44
走火
Rank: 1
等 级:新手上路
帖 子:426
专家分:0
注 册:2005-12-28
得分:0 

楼上的大哥,真厉害,
写的程序格式清晰,
简单明也,一看就是高手

一下就看出我的错误了。
谢谢大哥哈

我居然没看清题意
原来是几个不重复的数,
我没有判断呢,呵呵

[此贴子已经被作者于2006-9-5 11:16:30编辑过]


我是一只小菜鸟,请大家多多照顾! QQ 87135637
2006-09-05 11:10
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
得分:0 
接下去换位,你想个数写个程序,让程序来猜。

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-09-05 16:37



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




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

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