当前位置: 代码迷 >> C语言 >> [求助]我看了要求自己做的猜数游戏
  详细解决方案

[求助]我看了要求自己做的猜数游戏

热度:391   发布时间:2006-09-05 10:10:27.0
[求助]我看了要求自己做的猜数游戏



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

#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编辑过]

搜索更多相关的解决方案: 游戏  tmp  void  main  

----------------解决方案--------------------------------------------------------
我英语垃圾,拼音也差,打字用五笔.
上面的提示如有错误,请大家见谅.
----------------解决方案--------------------------------------------------------

#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);
//猜字游戏
}


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------

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

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

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

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


----------------解决方案--------------------------------------------------------
接下去换位,你想个数写个程序,让程序来猜。
----------------解决方案--------------------------------------------------------
  相关解决方案