2018年2月28日 星期三

[C_AR178-易] 猜數字之提示(C++)

[C_AR178-易] 猜數字之提示

Time Limit: 2 seconds
問題描述 :
已知,猜數字是兩個人玩的遊戲,一方出題,另一方猜。出題的人要先想好一個「沒有重複數字」的 4 位整數,當作是答案,不能讓猜的人知道。猜的人就可以開始猜。每猜一次,出題者就要根據猜數給出「幾 A 幾 B 」,當作是提示,其中 A 前面的數字表示「數字猜中且位置也猜中」的個數,而 B 前的數字表示「數字猜中且位置沒猜中」的個數。例如,答案為 6234 而猜數 5246 ,則提示「 1A2B 」,因為 2 不但被猜中且位置也對了,記為 1A ,而 6 和 4 這兩個數字猜中且位置沒猜中,因此記為 2B ,合起來就是 1A2B 。
針對每一個題目,都只猜一次,然後程式就輸出該次猜數的提示。
輸入說明 :
程式首先要求輸入一個正整數,代表接下來有幾對「答案 - 猜數」,然後依序輸入相應對數的「答案 - 猜數」
例如,
2
1234 4321
5678 5721
表示有 2 對「答案 - 猜數」,第一題的答案是 1234 ,而相應的猜數是 4321 ,第二題的答案是 5678 ,而相應的猜數是 5721 。
輸出說明 :
針對每一組 「答案 - 猜數」,輸出相應的提示,並換行
例如,針對上述輸入,第一題的答案是 1234 ,而相應的猜數是 4321 ,故提示 0A4B ,第二題的答案是 5678 ,而相應的猜數是 5721 故提示 1A1B 。所以輸出如下 :
0A4B
1A1B
範例 :

輸入範例輸出範例
2
1234 4321
5678 5721
0A4B
1A1B
  1. #include <iostream>  
  2. using namespace std;  
  3. int guessA(intint);  
  4. int guessB(intint);  
  5. int main() {  
  6.     // [C_AR178-易] 猜數字之提示  
  7.     int N;  
  8.     cin >> N;  
  9.     for(int i = 0;i < N;i++)  
  10.     {  
  11.         int ans, gue;  
  12.         cin >> ans >> gue;  
  13.         cout << guessA(ans, gue) << "A" << guessB(ans, gue) << "B" << endl;  
  14.     }  
  15.     return 0;  
  16. }  
  17. int guessA(int a, int b){  
  18.     string A = to_string(a);  
  19.     string B = to_string(b);  
  20.       
  21.     int Acount = 0;  
  22.     for(int i = 0;i < 4;i++)  
  23.     {  
  24.         if(A[i] == B[i])  
  25.         {  
  26.             Acount++;  
  27.         }  
  28.     }  
  29.     return Acount;  
  30. }  
  31. int guessB(int a, int b){  
  32.     string A = to_string(a);  
  33.     string B = to_string(b);  
  34.     int Bcount = 0;  
  35.     for(int i = 0;i < 4;i++)  
  36.     {  
  37.         for(int j = 0;j < 4;j++)  
  38.         {  
  39.             if(i != j && A[i] == B[j])  
  40.             {  
  41.                 Bcount++;  
  42.             }  
  43.         }  
  44.     }  
  45.     return Bcount;  
  46. }  

沒有留言:

張貼留言