zoukankan      html  css  js  c++  java
  • hdu1172猜数字

    **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**
    解题思路:直接把所有四位数枚举一遍,如果该四位数满足输入情况,则输出该四位数

    #include<stdio.h>
    #include<string.h>
    
    int a[1000],b[1000],c[1000];
    int  Judge(int x,int y)
    {
        int pa[10],px[10];
        int w = a[y];
        int i,j,sum,sum2;
        for( i = 4; i >= 1; i--)
        {
            pa[i] = x%10;
            x/=10;
            px[i] = w%10;
            w/=10;
        }
        sum = 0;
        /*找在正确位置上的数有几个*/
        for( i = 1; i <= 4; i ++)
            if(pa[i] == px[i])
                sum ++;
        sum2 = 0;
        if( sum == c[y])
        {
            /*找猜对的数字有几个*/
            for( i = 1; i <= 4; i ++)
            {
                for( j = 1; j <= 4; j ++)
                {
                    if(px[j] == pa[i])
                    {
                        sum2++;
                        px[j] = -1;
                        pa[i] = -1;
                        break;
                    }
                }
            }
            if( sum2 == b[y])
            {
                return 1;
            }
            else
                return 0;
        }
        else
            return 0;
    }
    
    int main()
    {
        int n;
        int i,j;
        int sum,ans;
        while(scanf("%d",&n),n!=0)
        {
    
            for( i = 1; i <= n; i ++)
                scanf("%d%d%d",&a[i],&b[i],&c[i]);
            sum = 0;
            for( i = 1000; i < 10000&&sum < 2; i ++)
            {
    
                for( j = 1; j <= n; j ++)
                {
                    if(!Judge(i,j))
                        break;
                }
                if(j == n+1)
                {
                    sum ++;
                    ans = i;
                }
            }
            if( sum == 1)
                printf("%d
    ",ans);
            else
                printf("Not sure
    ");
        }
        return 0;
    }
    

    后记:这两天根本写不动01背包的题,本来想写点轻院上比这更水的题找自信,赵老师调侃说,如果你已经沦落到靠写水题找自信,那么你就是彻底的水货了。我默默关掉网站,写了这道稍微不那么水的题(其实还是暴力)。

  • 相关阅读:
    Golang的跨平台编译程序
    PySide教程:Clo“.NET研究”se 狼人:
    PyS“.NET研究”ide QtCore.Signal帮助手册 狼人:
    PySide教程:“.NET研究”第一个PySide应用 狼人:
    关“.NET研究”于Android的一些设计 狼人:
    资深设计师Tony Ventrice解析手机游戏开“.NET研究”发的四个层次 狼人:
    移动开发多平台代码共享“.NET研究” 狼人:
    关于做Andr“.NET研究”oid+J2ee系统集成开发的一点心得 狼人:
    “.NET研究”【Android开发教程】一、基础概念 狼人:
    “.NET研究”如何发布你的Android应用程序 狼人:
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7350158.html
Copyright © 2011-2022 走看看