2 shyany shyany 于 2017.08.30 19:25 提问

想问一下 c语言解决猜数字的 让计算机自己输入输出知道运行结束 希望步骤尽量少

#include
#include
#define M 4 //猜几个数字
//交换
void swap(int*a,int*b)
{
int t=*a;
a=*b;
*b=t;
}
//将数组随机打乱
void random_shuffle(int
a,int n)
{
int i;
for(i=0;i<n;i++)
{
int x=rand()%n;
int y=rand()%n;
if(x!=y) swap(a+x,a+y);
}
}
//生成数位不重复的M位全部数据,存在数组a中,并打乱,备用
int gen(int* a)
{
int count=0,i,j;
int max=1;
for(i=0;i<M;++i,max*=10);

for(i=0;i<max;++i)
{
_Bool flag[10]={0};
int t=i;
for(j=0;j<M;++j)
if(flag[t%10]) break;
else flag[t%10]=1,t/=10;
if(j==M)
a[count++]=i;

}
random_shuffle(a,count);
return count;
}
void test(int answer,int player,int* A,int* B)
{
int i=0,j;

int answer_a[M]={0},player_a[M]={0};
*A=*B=0;

while(answer||player)
{
    answer_a[i]=answer%10;
    player_a[i++]=player%10;
    answer/=10;
    player/=10;
}
for(i=0;i<M;++i)
    for(j=0;j<M;++j)
       if(player_a[i]==answer_a[j])
           if(i==j) ++*A;
            else ++*B;

}
//参数AB是上一轮猜测的反馈,
//如果得到猜中的信息表示下一把的开始
int guess(int A,int B)
{
//你的工作在这个函数
int x;
return x;
}
int main()
{
srand(2);
int i;
//初始生成数据
int len;
for(len=1,i=0;i<M;++i)
len*=10-i;
int a[len];
gen(a);
//开玩
int n=1;//玩n把
int count=0;//总猜测次数
while(n--)
{
//每把从猜中开始,例如玩4个数,4A0B为猜中,
//此时进入下一把,会有新的数供猜测
//printf("%d\n",a[n]);
int A=M,B=0;
int count_cur=0;
do
{
int player=guess(A,B);
++count_cur;
test(a[n],player,&A,&B);
printf("%d:%0*d,%dA%dB\n",count_cur,M,player,A,B);
}while(A!=M||B);
count+=count_cur;
}
return 0;
}

1个回答

caozhy
caozhy   Ds   Rxr 2017.08.30 23:46

既然在ab这个范围内,一般就取(a+b)/2好了。

shyany
shyany 可以提供一下少的那段代码和注释吗
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c++猜数字游戏(电脑来猜)c++程序设计原理与实践习题4.4
编写一个猜数游戏程序。用户给出一个 1 到 100 之间的整数,程序通过提问来猜测用户所想的数是什么(例如:”你的数小于50吗?“),程序应该能够用不超过7个问题来确定这个数。提示:使用 以上是原题目,开始一直没思路,怎么在7个问题内让电脑猜出我心中所想的数字呢。由是打开了百度,心想看看别人的源码就行了(就是想快点看下一章)。结果查了半天都是让用户来猜程序设置的随机数,这不符合题意呀!也可能我
猜数字游戏-人出题,电脑猜(转贴)
/** 文件名称: GuessNum.h* 程序描述:*    常见的小游戏【猜数字】的智能解法:*    猜数字游戏:    即有四位十进制数字,一般可猜8次*                每次返回aAbB(A表示数字正确并且位置正确,B表示数字正确但位置不正确)*                如:假设要猜的数字是1234,如果游戏者猜0134即返回2A1B(3、4为A,1为B)**   
关于集合思想,人机猜数
这次程序设计的题目是: 由计算机“想”一个四位数,请人猜这个四位数是多少。人输入这个四位数后,计算机首先判断这四个数中有几个猜对了,称之为B,并且在猜对的数字中又有几位位置也是对的,称之为A,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数为止。请编程实现该游戏,游戏结束时,显示人猜一个数用了几次。     第一个问题是:如何让计算机想一个四位数,因为没有明确要求所以可以是重复
用C语言来写猜数字游戏
猜数字游戏 首先制定目录用menu(),然后用switch语句在选择玩游戏时调用游戏的函数,先设定随机数字,然后用while语句来循环数字是否输入正确。 rand是生成一个伪随机数(0-32767),是在调用rand的时候要用srand函数(设置随机数的生成起点)为伪随机数生成器提供种子。 rand随机生成的数字太大,所以去模100,余数也是随机数。 void srand( unsig...
计算机猜数算法
算法基本分2部分先筛选出前2个数字,判断他们的位置,后不参加后面的判断,直到四个数字位置全对在筛选出后2个数字,判断他们的位置 最终结果存放在一个数组中S[]中首先从0000,1111,2222….开始for循环到9999依次判断人输入的猜对的个数M,知道有数字猜对会有5种情况,依次为M=0:进行下次循环M=1:得知此时四个数中的一位,设为N1,N1位置设为LN1=
用c语言实现设计一个猜数字的游戏,由计算机随机产生一个1-200之间的数,游戏开始后你从键盘输入一个1-300之间的数,如果你猜中了计算机会告诉你猜中了,给出对你的评论,并告诉你你所用的时间。如果你没有猜中则会提示你,你输入的数是大了还是小了,直到你猜中为止。
目 录 摘要………………………………………………………………………….Ⅰ 1 前言 1 2 需求分析 1 2.1要求 1 2.2任务 1 2.3运行环境 1 2.4开发工具 1 3 概要设计 1 3.1 主函数流程图 1 3.2输入函数流程图 2 3.3创建文件函数流程图 2 3.4查找函数流程图 2 3.5输出函数流程图 3 4 详细设计 3 4.1分析和设计 3 4.2 具体代码实现 3 5 课程设计的总结与体会 4 参考文献 4
反猜数字程序(计算机猜你心里想的数字)
大家玩过猜数字游戏吧?是人猜电脑的数,现在反过来,你想一个数,让电脑来猜。 每次对所给数字评价,数正确且位置对打* 存在该数但位置不对打+ 不存在该数打-
腾讯笔试题:猜字游戏---猜1-100之间一个数字,最少多少次?第一次猜的数是几?
题目: A、B两人玩猜字游戏,游戏规则如下: A选定一个 [1,100]之间的数字背对B写在纸上,然后让B开始猜; 如果B猜的偏小,A会提示B这次猜的偏小; 一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不会再提示,只回答猜对与否。 请问:B至少要猜( )次才能保证猜对?在这种策略下,B第一次猜测的数字是( )。 解析: 假设至少要猜x次。 第一次猜的数
【C语言】猜数字小游戏
题目:由计算机“想”一个四位数,请人猜这个四位数是多少。人输入这个四位数后,计算机首先判断这四位数中有几个猜对了,并且在猜对的数字中又有几个位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数为止。请编程实现这个游戏,游戏结束时,显示猜一个数用了几次。解答:#include <stdio.h> #include "stdafx.h" #include <stdlib.h>
让计算机来做猜数字
import java.io.*;//package com.maodajun.javaeye2;public class GuessNumber2{  public static void main(String[] argv) throws Exception  {    GuessNum gn = new GuessNum();    BufferedReader br = new