猜数字的程序

原创 2004年10月26日 14:56:00
/*
  Author:   avalon    qq:1243128 
  Date:        26-10-04 14:51
  Description: 0-9中随即抽选4个数,组成4位数,(这次仅讨论他们不重复的情况.)
               然后由程序猜这个数值,人给出猜的结果,
               用xAyB表示,A表示你猜对,且这个数值的位置也正确的有X个,
               B表示你猜对,但是位置的错误的数值有Y个.
               这是一个用筛选法做的程序。。算法不太好的说:(
*/
#include <iostream>
#include <list>
#include <vector>
#include <string>
#include <stdlib.h>
using namespace std;
//全局VECTOR,用于存储数字集合
list<string> number;
void init(void)
{/////////////初始化VECTOR///////////////
    for(int a=0;a<=9;a++){
        for(int b=0;b<=9;b++){
            if(a==b)continue;
            for(int c=0;c<=9;c++){
                if(c==a || c==b)continue;
                for(int d=0;d<=9;d++){
                    if(d!=a && d!=b && d!=c){
                        char sa[4]={a+'0',b+'0',c+'0',d+'0'};
                        string temp(sa,sa+4);                                                                  
                        number.push_back(temp);
                    }   
         }  }//c end
    }  }//a end
}//fun end
bool comp(string ss,string sd,string input)
{//比较!!如果两个数不符合条件input,则返回false
 //num_s为vector中的数,num_d为猜测数,input为串
  int s[4],d[4];
  if(ss == sd)return false;
  //分解 
  s[0]=ss[0]-'0';s[1]=ss[1]-'0';s[2]=ss[2]-'0';s[3]=ss[3]-'0';
  d[0]=sd[0]-'0';d[1]=sd[1]-'0';d[2]=sd[2]-'0';d[3]=sd[3]-'0';
  //xAyB
    int x=input[0]-'0';   
    int y=input[2]-'0';   
    //comp........
    do{
        int xy=x+y;//共匹配的数        
        int sum=0;
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                if(s[i]==d[j])sum++;
            }
        }
        if(sum!=xy)return false;
        //           
    }while(0);
    do{
        //绝对匹配x  
        if(x){
            int sum=0;
            for(int i=0;i<4;i++){
                if(s[i]==d[i])sum++;
            }
            if(sum!=x)return false;        
        }    
    }while(0);
    do{//仅数字匹配,位置不匹配
        if(y){
            int sum=0;
            for(int i=0;i<4;i++){
                for(int j=0;j<4;j++){
                    if(s[i]==d[j] && i!=j)sum++;
                }
            }
            if(sum!=y)return false;
        }           
    }while(0);                                               
 return true;
}                        
void filt(string num,string input)
{//过滤!! num为猜测数,input为人输入的串
 list<string>::iterator iter=number.begin();
  while(iter!=number.end()){
      list<string>::iterator temp=iter;
      iter++;
      //
      if( comp(*temp,num,input)==false )number.erase(temp);
   }      
}
string sui_ji(void)
{//在vector中随机选个数
    vector<string> temp(number.begin(),number.end());
 random_shuffle(temp.begin(),temp.end()); 
  return *(temp.begin());
}                  
int main(void)
{
    string quit;  
    do{
        init();
       do{
           string input;
           string num;
           cout<<"输入avalon或者AVALON或者4a4b或者4A4B结束!"<<endl;
           while( 1){
               num=sui_ji();
               cout<<num<<'/t'<<"数据集还有"<<number.size()<<"个数"<<endl;
               cin>>input;
               if( input=="avalon" || input=="AVALON"){
                   list<string>::iterator iter=number.begin();
                   int enter=0;
                   for(;iter!=number.end();iter++){                      
                       if(enter++%8==0)cout<<endl;                      
                       cout<<*iter<<"    ";
                   }
                   cout<<endl;
                   break;   
               }
               if( input == "4a0b" || input =="4A0B"){
                   cout<<"ok"<<endl;
                   break;
               }   
               filt(num,input);
           }   
       }while(0);
       //清空vector   
       number.erase(number.begin(),number.end());
      
       cout<<"继续吗?";
       cin>>quit;       
   }while(quit=="y" || quit=="Y");
   cout<<"bye~~~~~~~~~~~~~~~~~"<<endl;        
  system("PAUSE"); 
  return 0;
}

用C++编的猜数字程序,由程序来猜

呵呵,上学期学的数据挖掘里面讲到关于信息量的方法,小试了一下: 猜数字游戏: ? 即有四位十进制数字,一般可猜8次 ? 每次返回aAbB(A表示数字正确并且位置正确,B表示数字正确但位置不正确) ? ...
  • realfun
  • realfun
  • 2004年08月21日 08:12
  • 2149

算法实战(一)--猜数字

首先给大家推荐个网站叫LeetCode Online,这是一个刷算法的网站; 今天lz做了一道题,这是原题的链接,猜数字; 题目很简单哈,举个例子 人家先选定个数字,比如说6,然后让你从1-10...
  • I_can_do_1098
  • I_can_do_1098
  • 2016年07月14日 12:16
  • 1176

Java——猜数字游戏小程序

/* 猜数字游戏: 1,产生随机数。 2,获取键盘录入。 3,将录入数据变成数字,和随机数比较。  给出提示信息。 4,重复这个过程,如果猜中,程序就结束。 注意:对于输入1~100以外...
  • tongxinglo
  • tongxinglo
  • 2012年09月23日 10:56
  • 405

猜数字的小程序源码

设计一个猜数字游戏程序,由系统自动产生一个四位数,各位数字互不相同,给玩家8次从键盘录入四个数字的机会,每次给出玩家猜中数字的个数及位置,直到数字及位置完全一致为止,如果8次机会均猜不中,则输出产生的...
  • tmd007
  • tmd007
  • 2006年01月12日 20:01
  • 1494

解猜数字游戏的程序

 电脑采用最擅长的穷举法来猜测,即:第一次,固定猜   0123;然后,人必定给出一个提示?a?b(1)。然后,电脑从0124开始搜索,每次加1,并分别和0123相比较,当找到第一个与标准答案一样为?...
  • sjcheck
  • sjcheck
  • 2007年10月28日 10:22
  • 567

Python学习笔记(五)猜数字游戏(while)

今天写的是一个猜数字游戏,我记得好像大二还是大三的时候在日方课上用vb实现过,大体思想就是先生成一个随机数,然后进行输入,程序会判断你输入的值和随机值相比较的结果,一直到你输入正确才退出循环体。 ...
  • lanzhizhuxia
  • lanzhizhuxia
  • 2012年08月18日 22:19
  • 1609

一个猜数字游戏的算法

////////////////////////////////////////////////////////////////////////////////////////////////////...
  • owl2008
  • owl2008
  • 2004年10月29日 15:55
  • 2463

python猜数字,只有3次机会

猜数字,只有3次机会
  • trb331617
  • trb331617
  • 2017年08月29日 20:48
  • 234

Python入门编程小程序-猜数字游戏

这是一个简单的小游戏,用到的Python知识相当少,但是还是需要了解Python基本语法的。 程序整体上的算法流程简单介绍如下(不想用VS画流程图了,懒):         既然猜数字游戏,那么首先应...
  • Handoking
  • Handoking
  • 2017年09月13日 14:58
  • 614

C++项目参考——猜数字游戏

【项目4-学习辅助软件开发】通过本题学习一些系统函数。任务1——猜数字游戏  随机产生一个1000内的数字,要求用户猜测这个整数。输入一个猜测想的整数,判断是否与产生的随机数相等,由屏幕显示判断结果。...
  • sxhelijian
  • sxhelijian
  • 2013年11月16日 15:52
  • 6184
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:猜数字的程序
举报原因:
原因补充:

(最多只允许输入30个字)