下面是我根据题意写的程序.
#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编辑过]
----------------解决方案--------------------------------------------------------
我英语垃圾,拼音也差,打字用五笔.
上面的提示如有错误,请大家见谅.
----------------解决方案--------------------------------------------------------
#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编辑过]
----------------解决方案--------------------------------------------------------
接下去换位,你想个数写个程序,让程序来猜。
----------------解决方案--------------------------------------------------------