閱讀996 返回首頁    go 阿裏雲 go 技術社區[雲棲]


HDU1172 猜數字

猜數字

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2313    Accepted Submission(s): 1329

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




本題采用的是暴力搜索法,在1000至9999中尋找滿足已經給出的那些數的情況,看看是不是每一個都符合,如果有這樣的數且在1000到9999中隻有一個,那麼就是這個數,如果有多個,那麼這個數就是不確定的數

#include<stdio.h>
#include<string.h>
struct node
{
  int number,lock,sum;
}per[150];
int Check(int n,int m)
{
    int a[4],b[4],sign[4],i,j,sumn;
    for(i=0;i<4;i++) sign[i]=0;
    a[0]=n/1000;
    a[1]=(n/100)%10;
    a[2]=(n/10)%10;
    a[3]=n%10;
    
    b[0]=per[m].number/1000;
    b[1]=(per[m].number/100)%10;
    b[2]=(per[m].number/10)%10;
    b[3]=per[m].number%10;
    sumn=0;
    
    for(i=0;i<4;i++)//判斷位置相同數 
    {
       if(a[i]==b[i])
       sumn++;
    }
    if(sumn!=per[m].lock) return 0; 
    
    sumn=0;
    for(i=0;i<4;i++)//判斷數字相同數 
    {
      for(j=0;j<4;j++)
      {
         if(a[i]==b[j]&&sign[j]==0)//Bug:隻能比較一次 
         {sumn++;sign[j]=1;break;}
      }
    }
    if(sumn!=per[m].sum) return 0;
    
    return 1;
}
int main()
{
    int i,j,n,flag,Sum,num;
    while(scanf("%d",&n),n!=0)
    {
       for(i=0;i<n;i++)
       scanf("%d%d%d",&per[i].number,&per[i].sum,&per[i].lock);
       flag=0;Sum=0;
       for(i=1000;i<=9999;i++)
       {
          for(j=0;j<n;j++)
          {
             flag=Check(i,j);
             if(!flag)break;
          }
          if(flag==1)
          {Sum++;num=i;}
       }
       if(Sum==1)
       printf("%d\n",num);
       else
       printf("Not sure\n");
       memset(per,0,sizeof(per));
    }
    return 0;
}



最後更新:2017-04-03 12:54:51

  上一篇:go Qt5.2 for Android 配置及部署到手機運行
  下一篇:go [LeetCode]24.Swap Nodes in Pairs