程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 杭電OJ——1172 猜數字(水題)

杭電OJ——1172 猜數字(水題)

編輯:C++入門知識

  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   比較水的一道題目,直接用暴力法就可以解答出來!盡管如此,還是花了我幾個小時寫代碼,糾錯,唉,罪過啊!看來水平還是太差!不過也不是太差,畢竟代碼以及思想是自己鼓搗出來的!下面發代碼! [cpp]  #include<iostream>   #include<cstring>   using namespace std;      struct Num   {       char key[5];       int x,y;   }arr[105];      bool Compare(char *str,int num)   {       int i,j,k,l;       int p,q;       int flag[5];       //cout<<str<<endl;          for(i=0;i<num;i++)       {           //cout<<i<<endl<<endl;           p=0;q=0;              memset(flag,0,sizeof(flag));              for(j=0;j<4;j++)           {               for(k=0;k<4;k++)               {                   if(!flag[k] && str[j]==arr[i].key[k])                   {//這裡有一個小知識點,我記錄一下,免得以後忘記!                   //關於指針,上面把地址傳遞給str,後面就可以直接用str[i]了!                       p++;                       flag[k]=1;                       break;                   }//這裡統計有一點錯誤!               }              if(arr[i].key[j]==str[j])                q++;             }                      if(p!=arr[i].x || q!=arr[i].y)               return false;       }       return true;   }         int main()   {       int num,count,sum;       char str[4];       while(cin>>num && num!=0)       {           count=0;           for(int i=0;i<num;i++)           {               cin>>arr[i].key>>arr[i].x>>arr[i].y;           }                      for(int i=1000;i<=9999;i++)           {               itoa(i,str,10);               if(Compare(str,num))               {                   count++;                   sum=i;               }           }           if(count==1)           cout<<sum<<endl;           else           cout<<"Not sure"<<endl;       }       return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved