| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1914 人关注过本帖
标题:[求助]电脑怎样玩文曲星的猜数游戏?
只看楼主 加入收藏
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
那谁能解释下代码呢?

2006-06-22 11:44
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
难道就没有人知道这道题吗?

2006-06-23 23:25
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

现在那里有时间啊~考试啊!


淘宝杜琨
2006-06-24 16:10
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
我也忙着考试呢!如果您有时间的话,可以解答!

2006-06-24 16:41
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

有谁能说说8楼的思想啊


2006-07-22 19:01
withoutme_hw
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-19
收藏
得分:0 

这个是我前些天写的,请大家看看对不对,有问题的话请联系我:withoutme_hw@163.com

/*
Name:numGuesser
Author: withoutme_hw
Description:随机产生四个互不相等的0-9间的数字,然后程序其他部分推理猜测这四个数字各是什么
要求数值跟位置都对,每次猜数之后可以与正确答案进行一次比较,并提示这次猜数的
位置和数值正确的数的个数和位置不正确而数值正确的数的个数,要求与正确答案比较的次数
越少越好,即猜的次数越少越好
Date:2006 4 15
LOC:124
*/
#include <stdio.h>

/*函数功能:比较Num[]中与passiveNum[]数字相符而位置不符的数的个数
函数参数:passiveNum[] 被比较的数组
Num[]
函数返回值:数字相符而位置不符的数字的个数
*/
int NumTest(int passiveNum[],int Num[])
{
int i,j,counter=0;
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
if(i==j) /*位置相等的情况跳过在此不做比较*/
continue;
if(Num[i]==passiveNum[j]) /*将Num[](待比较数组)与被比较数组passiveNum[]进行比较*/
{
counter++; /*计数器自加1,即数字符合而位置不符的数的个数增1*/
/*i++;
j=-1; */ /*出现相等情况,则无需再将这个Num[]中的数与其他passiveNum中的数进行比较,跳到Num[]的下个数*/
}
}
}
return counter;
}

/*函数功能:比较Num[]和passiveNum[]中相同下标(即相同位置)的数字相等的个数
函数参数:两个待比较的数组passiveNum[]和Num[]
函数返回值:数字和位置都相符的数的个数
*/
int PositionTest(int passiveNum[],int Num[]) /*passiveNum[]为被比较的数组*/
{
int i,counter=0;
for(i=0;i<=3;i++)
{
if(Num[i]==passiveNum[i]) /*对每一个相同下标的数进行比较*/
counter++; /*数字和位置都符合的数的个数增1*/
}
return counter;
}

main()
{
int i,a,b,c,d,e,f,randNum[4],counter=0,selNum[4],guessNum[10][6],rightFlag=1;

for(a=0;a<=9;a++)
{
guessNum[a][0]=guessNum[a][4]=-1;
}
srand(time(NULL)); /*随机数种子*/
for(a=0;a<=3;a++)
{
randNum[a]=rand()%9; /*code review-忘记在rand后加括号*/
b=a-1;
while(b>=0)
{
if(randNum[b]==randNum[a])
{
a--;
break;
}
b--;
} /*这次随机产生的四个数与已产生的所有数进行比较,若有相同的,这次的随机值不符合,重新赋值*/
} /*产生一组(4个)互不相等的随机数,即待推测的数*/
printf("the key:\n");
for(f=0;f<=3;f++)
{
printf("%d ",randNum[f]);
} /*打印正解*/
printf("\n\n");
/*for(a=0;a<=3;a++)
{
printf("%d ",randNum[a]);
} */
/*printf("\n"); */
/*getch(); */
for(a=0;a<=9;a++)
{
selNum[0]=a;
for(b=0;b<=9;b++)
{
selNum[1]=b;
if(selNum[1]==selNum[0])
continue;
for(c=0;c<=9;c++)
{
selNum[2]=c;
if(selNum[2]==selNum[1]||selNum[2]==selNum[0])
continue;
for(d=0;d<=9;d++)
{
selNum[3]=d;
if(selNum[3]==selNum[2]||selNum[3]==selNum[1]||selNum[3]==selNum[0])
continue; /*以上四重for循环可产生所有从0-9选出4个数的全排列,显然四数互不等*/
e=0;
while(guessNum[e][0]!=-1)
{
if(guessNum[e][4]!=PositionTest(selNum,guessNum[e])|| /*compile-少加一个括号*/
guessNum[e][5]!=NumTest(selNum,guessNum[e])) /*compile-guessNum 错写为guess*/
/*假定selNum为正确答案,依次与guessNum中所有猜数情况进行比较,
看是否符合,若符合,则有可能为正解*/
{
/*code review-多加
d++; */
/*若与已猜情况矛盾则直接进行下次选数 即选selNum*/
rightFlag=0; /*rightFlag赋为0,即这次选出的selNum不可能*/
break; /*跳至下次选数*/
}
e++; /*code review-忘记写此行*/
}
if(rightFlag!=0) /*若这次选出的selNum有可能*/
{
for(f=0;f<=3;f++)
{
guessNum[e][f]=selNum[f];
printf("%d ",selNum[f]);
} /*这次选出的selNum有效,算作一次猜数,下面用selNum与正解比较,并得到提示*/
guessNum[e][4]=PositionTest(randNum,selNum);
guessNum[e][5]=NumTest(randNum,selNum); /*compile-使用||导致有一个函数未调用*/
printf("%dA%dB \n",guessNum[e][4],guessNum[e][5]);
getch();
if(guessNum[e][4]==0)
/* 调用PositionTest和NumTest得到提示
将位置对,数字对的个数存入guessNum[e][4]
将位置不对,数字对的个数存入guessNum[e][5]
当两个提示中有一者为零时*/
{
/*code review-错误:
a++,b=c=0,d=-1; 将a跳至下次选数过程,b,c,d变为初始选数过程 */
selNum[0]=++a;
selNum[1]=b=0;
if(a!=1)
{
selNum[3]=d=selNum[2]=c=1;
}
else
{
selNum[3]=d=selNum[2]=c=2;
}
continue;
}
if(guessNum[e][4]==4) /*四个数字的位置和数值均猜对*/
{
/*for(i=0;i<=e;i++)
{
for(f=0;f<=3;f++)
{
printf("%d ",guessNum[i][f]);
}
printf("%dA%dB\n",guessNum[i][4],guessNum[i][5]);
} */ /*打印出每次所猜的数和判断的结果*/
printf("the program have guessed %d times\n",e+1);
getch();
exit();
}/*end of if*/
}/*end of if*/
rightFlag=1; /*test-忘记对rightFlag清零*/
} /*end of for(d)*/
} /*end of for(c)*/
} /*end of for(b)*/
} /*end of for(a)*/
} /*end of main()*/
/*
plan: actually
plan 10min 10min
design 1.5h 2.5h
code 1.5h 1.5h
code review 1.5h 40min
compile 10min 15min
test 1h 30min
in all 5h50min 5h40min
*/




好好学C 天天向上
2006-07-23 16:13
陈小羊
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-7-24
收藏
得分:0 

南航的......

2006-07-24 11:38
快速回复:[求助]电脑怎样玩文曲星的猜数游戏?
数据加载中...
 
   



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

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