hdu1172猜数字

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1172

题目

猜数字

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 2540    Accepted Submission(s): 1475

Problem Description

猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。

比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。

现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。

Input

输入数据有多组。每组的第一行为一个正整数N(1<=N<=100),表示在这段对话中共有N次问答。在接下来的N行中,每行三个整数A,B,C。gameboy猜这个四位数为A,然后计算机回答猜对了B个数字,其中C个在正确的位置上。当N=0时,输入数据结束。

Output

每组输入数据对应一行输出。如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Not sure"。

Sample Input

6
4815 2 1
5716 1 0
7842 1 0
4901 0 0
8585 3 3
8555 3 2
2
4815 0 0
2999 3 3
0

Sample Output

3585
Not sure

Author

lwg

Recommend

We have carefully selected several similar problems for you:  1106 1175 1174 1180 1108

这个题目的思路是:

从1000到9999进行暴力枚举。。。

需要满足两个条件:

1:题目所给的条件和目前枚举的值要有相同的位数的值要相等。。

2:将目前枚举的数和题目所给的数进行枚举,看所给的条件的数与目前枚举的的数的出现相同的数相等的数有多少个。。但是重复的书不算。。所以开个标志变量。。。

所以我的暴力枚举解法如下:

#include<cstdio>
#include<cstring>
const int maxn=100+10;
struct node
{
    int a,b,c;
}point[maxn];
int a[5],b[5];
int mark[5];
void pre_deal(int c,int d)
{
    a[1]=c/1000;
    a[2]=c/100%10;
    a[3]=c/10%10;
    a[4]=c%10;
    b[1]=d/1000;
    b[2]=d/100%10;
    b[3]=d/10%10;
    b[4]=d%10;
}

int judge(int x,int y)
{
     int count1,count2;
     count1=count2=0;
     memset(a,0,sizeof(a));
     memset(b,0,sizeof(b));
     memset(mark,0,sizeof(mark));
     pre_deal(x,point[y].a);
     for(int i=1;i<=4;i++)
        {
             if(a[i]==b[i])
               count1++;
        }
    // printf("count1:%d\n",count1);
     if(count1!=point[y].c)
         return 0;
     for(int i=1;i<=4;i++)
        for(int j=1;j<=4;j++)
       {
          if(a[i]==b[j]&&!mark[j])
          {
             mark[j]=1;
             count2++;
             break;
          }
       }
    //printf("count2:%d\n",count2);
    if(count2!=point[y].b)
        return 0;
    else
        return 1;
}

int main()
{
    int n,ok;
    int count,ans;
    while(scanf("%d",&n)!=EOF&&n)
    {
        count=0;
        for(int i=1;i<=n;i++)
            scanf("%d%d%d",&point[i].a,&point[i].b,&point[i].c);
        for(int i=1000;i<=9999;i++)
            {
                ok=1;
                for(int j=1;j<=n;j++)
                 {
                     ok=judge(i,j);
                     if(!ok)
                        break;
                 }
                if(ok)
                {
                    count++;
                    ans=i;
                }
                if(count==2)
                  break;
            }
     //   printf("count:%d\n",count);
        if(count==1)
            printf("%d\n",ans);
        else
            printf("Not sure\n");
     }
    return 0;
}

hdu1172猜数字

时间: 2024-10-20 16:49:40

hdu1172猜数字的相关文章

hdu1172猜数字(暴力枚举)

猜数字 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3373    Accepted Submission(s): 1975 Problem Description 猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么.每猜一个数,计算机都会告诉玩家猜对几个数字,其中

HDU1172 猜数字 【暴力】

猜数字 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2960    Accepted Submission(s): 1728 Problem Description 猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么.每猜一个数,计算机都会告诉玩家猜对几个数字,其

HDU1172 猜数字【水题】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1172 题目大意: 计算机随机产生一个四位数,然后玩家去猜这个四位数,每次猜测,计算机都会告诉 你猜对了几个数字,有几个数字在正确的位置上.现在给你N组猜测的结果,那么问 题来了:能否根据这几组猜测的结果去确定这个四位数是多少.如果能确定,输出这 个四位数.如果不能确定,输出:"Not sure". 思路: 只是四位数的话,暴力枚举就可以了.找到满足这几组猜测结果的四位数.如果只有 1个,

20170913自制猜数字游戏

/* 猜数字:系统随机生成一个四位数,请根据下列判断猜出来 A:数值正确,位置正确 B:数值正确,位置不正确 C:数值不正确 */ #include<stdio.h> #include<time.h> #include<stdlib.h> #pragma warning (disable:4996) #define pUCharHead unsigned char * //以数组形式返回n个无重复的随机数,范围可指定[min,max] pUCharHead GenNoR

JavaScript一个猜数字游戏

效果图: 代码: <body> <script type="text/javascript"> window.onload = newgame; //页面载入的时候就开始一个新的游戏 window.onpopstate = popState; //处理历史记录相关事件 var state,ui; //全局变量,在newgame()方法中会对其初始化 function newgame( playagin ){ //开始一个新的猜数字游戏 //初始化一个包含需要的文

函数调用_猜数字和简易计算器

package app1; import java.util.*; public class TestFunction{     public static void main(String[] args){         Scanner sc=new Scanner(System.in);         System.out.print("请选择一项应用:\n1.猜数字\n2.简易计算器");         int n=sc.nextInt();         switch(

【bzoj入门】3189 猜数字(数学,搜索)

Description 味味最近在玩猜数字的游戏,现在她也希望你来玩一下这个游戏.猜数字游戏的规则是这样的,告诉你一个正整数 n(2<=n<=11),然后味味心中会想一个 n 个数字组成的数字串 (数字串最前面若干位可能是 0).味味会随意排列 n 位数上的数字,这样可能产生 n!个 n 位数.(n!=1×2×3×4×5×......×n,n!念作"n 阶乘").比如味味想了一个三位数 abc,那么一共会产生六个三位数,分别为 abc,acb,bac,bca,cab,cba

猜数字游戏及rand()函数

#include<stdio.h>#include<stdlib.h>int main() { short number; short guess=0; number=rand()%100; number++; printf("猜数字游戏\n"); printf("该数字在1到100之间\n"); while(guess!=number) { printf("请你输入所猜数字:"); scanf("%hd&quo

简单的猜数字小游戏

/** 简单的猜数字小游戏 要求如下: 用户输入想猜测数字的范围,输入1000则是0~1000之内的数字,程序就会内置一个 1 到 1000 之间的数字作为猜测的结果,由用户猜测此数字,用户每猜测一次,由系统提示猜测结果:大了.小了或者猜对了:直到用户猜对结果,则提示游戏结束.用户可以提前退出游戏,即,游戏过程中,如果用户录入数字0则游戏终止.加入新功能: 记次猜测次数功能,提示游戏开始时间,计猜测总用时功能,提示游戏结束时间 思路:1.用户输入电脑生成的数值取值范围,接收并判断是否是合理数值?