请人想一个四位的整数,计算机来猜,人给计算机提示信息,最终看计算机用几次猜数一个人“想”的数,请编程实现。
1.问题分析与算法解决
解决这类问题时,计算机的思考过程不可能像人一样具备较完备的推理能力,关键在于要将推理和判断的过程变成一种机械的过程,找出相应的规则,否则计算机难于完成推理工作。
基于对问题的分析和理解,将问题进行简化,分解分为两步完成:首先确定四位数字的组成,然后再确定四位数字的排列顺序。可以列出如下规则:
a.分别显示四个1,四个2,…四个0,确定四位数字的组成。
b.依次产生四位数字的全部排列(依次两两交换全部数字的位置)。
c.根据人输入的正确数字及正确位置的数目,进行分别处理:
注意此时不出现输入3的情况,因为在四个数字已经确定的情况下,若有3个位置正确,则第四个数字的位置必然是正确的。
若输入4:游戏结束。
判断本次输入与上次输入的差值。
若差为2:说明前一次输入的一定为0,本次输入的为2,本次交换的两个数字的位置是正确的,只要交换两外两个没有交换过的数字即可结束游戏。
若差为-2:说明前一次输入的一定为2,本次输入的一定为0。说明刚交换的两个数字的位置是错误的,只要将刚交换的两个数字位置还原,并交换另外两个没有交换过的数字即可结束游戏。
否则:若本次输入的正确位置数<=上次输入的正确位置数
则恢复上次四位数字的排列,控制转c。
否则:将本次输入的正确位置数作为“上次输入的正确位置数”,控制转c.
2.程序与程序注释
#include <stdio.h>
int a[4],flag,count;
void prt();
void bhdy(int s,int b);
void main()
{
int b1,b2,i,j,k=0,p,c;
printf("Game Begin\n");
printf("Now guess your number in mind is # # # #.\n");
for(i=1;i<10&&k<4;i++) //分别显示四个1到9确定四个数字的组成
{