杭电1172猜数字

                                          猜数字
                      Time Limit: 1000/10000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others)
                          Total Submission(s): 58    Accepted Submission(s): 1
                                      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"。
 
SampleInput
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
 
SampleOutput
3585
Not sure

还没做出来,网上说是水题.

目前代码附上:

  1 #include<stdio.h>
  2 #include<math.h>
  3 #define elm 4
  4 
  5 //给flag数组赋值 
  6 void valuation(int arr[],int x,int len)
  7 {
  8     if(len>4)
  9     {
 10         return;
 11     }
 12     for(int i=elm-1;i>=0;i--)
 13     {
 14         arr[i] = x % (int)pow(10,len-i);
 15     }
 16     return;
 17 }
 18 
 19 //将flag数组中不正确的值置为-1 
 20 void setting(int arr[],int x,int len)
 21 {
 22     if(len>4)
 23     {
 24         return;
 25     }
 26     int brr[len];
 27     //赋值 
 28     valuation(brr,x,len);
 29     
 30     for(int i=0;i<elm;i++)
 31     {
 32         for(int j=0;j<len;j++)
 33         {
 34             if(arr[i]==brr[j])
 35             {
 36                 arr[i] = -1;
 37             }
 38         }
 39     }
 40 }
 41 
 42 //更改数组元素值(如有必要) 
 43 void change(int arr[],int x,int len)
 44 {
 45      if(len>4)
 46     {
 47         return;
 48     }
 49     int crr[len];
 50     //赋值 
 51     valuation(crr,x,len);
 52     
 53 }
 54 
 55 
 56 
 57 int main()
 58 {
 59     int n = 0;
 60     int i;
 61     
 62     while(scanf("%d",&n)!=0)
 63     {
 64         //标记数及c存放最终结果的数组(无法确定的数用-1表示) 
 65         int isp = 1;
 66         int flag[elm] = {0};
 67         while(n--)
 68         {
 69             int a,b,c;
 70             scanf("%d%d%d",&a,&b,&c);
 71             if(b==0)
 72             {
 73                 valuation(flag,a,4);
 74                 if(c!=0)
 75                 {
 76                     //换值 
 77                     change(flag,a,4);
 78                 }
 79             }
 80             //一个数字都没猜对 
 81             else
 82             {
 83                 //-1
 84                 setting(flag,a,4);
 85             }
 86             
 87         }
 88         for(i=0;i<elm;i++)
 89         {
 90             //如果其中存在一个无法确定的数(-1),则isp置为0; 
 91             if(flag[i]==-1)
 92             {
 93                 isp = 0;
 94                 break;
 95             }
 96         }
 97         if(isp)
 98         {
 99             for(i=0;i<elm;i++)
100             {
101                 printf("%d",flag[i]);
102             }
103             printf("\n");
104         }
105         else
106         {
107             printf("Not Sure\n");
108         }
109             
110     }
111     
112     return 0;
113 }

猜你喜欢

转载自www.cnblogs.com/kyrie211/p/10099196.html
今日推荐