PAT乙級1008-ハサミ石布

4690 ワード

       “     ”   :

          ,       、 、   ,                  。

説明を入力:
   1      N(<=105),        。  N ,           ,  、           。C  “  ”、J  “  ”、B 

 “ ”, 1       , 2     ,   1   。

出力の説明:
   1、2      、   、 、   ,    1     。 3       ,     、          ,   1   。     

 ,           。

入力例:
10

C J

J B

C B

B B

B C

C C

C B

J B

B C

J J

出力例:
5 3 2
2 3 5
B B
#include<iostream>
using namespace std;
int win[3] = { 0 };    //    
char max3(int *a)
{                                                        
           char r = 'B' ;                    //C  “  ”、J  “  ”、B  “ ”
           if (a [1] > a[0])    //a[0]-   a[1]-   a[2]-  
          {                                              
                    a[0] = a [1];           //'B'-66  'C'-67  'J'-74
                   r = 'C';
          }
           if (a [2] > a[0])
                   r = 'J';
           return r;
}
int main()
{
           int n;
           char a[105], b[105];
           int awin[3] = { 0 };
           int bwin[3] = { 0 };
          cin >> n;
           for (int i = 0; i < n; i++)
          {
                   cin >> a[i] >> b[i];        //    
                    int k = (a[i] - b[i]) * (a[i] - b[i]); 
                    if (k == 1)
                             a[i] == 66 ? win[0]++, awin[0]++ : (win[1]++, bwin[0]++);
                    else if (k == 49)
                             a[i] == 67 ? win[0]++, awin[1]++ : (win[1]++, bwin[1]++);
                    else if (k == 64)
                             a[i] == 74 ? win[0]++, awin[2]++ : (win[1]++, bwin[2]++);
                    else
                             win[2]++;
          }
          cout << win[0] << " " << win[2] << " " << win[1] << endl;  //    
          cout << win[1] << " " << win[2] << " " << win[0] << endl;  //    
          cout << max3(awin) << " " << max3(bwin);
          system( "pause");
           return 0;
}

//by myself
#include<iostream>
using namespace std;
int main()
{
           char a[105] = { 0 }, b[105] = { 0 };
           int n = 0;
           int win = 0, ping = 0, lose = 0;
           int aC = 0, aB = 0, aJ = 0, bC = 0, bB = 0, bJ = 0;
          scanf( "%d", &n);
           for (int i = 0; i < n; i++)
          {
                   scanf( " %c %c", &a[i], &b[i]);
                    if ((a[i] == 'C' ) && (b[i] == 'J')) { win++; aC++; continue; }
                    if ((a[i] == 'J' ) && (b[i] == 'B')) { win++; aJ++; continue; }
                    if ((a[i] == 'B' ) && (b[i] == 'C')) { win++; aB++; continue; }
                    if ((a[i] == 'C' ) && (b[i] == 'C')) { ping++; continue; }
                    if ((a[i] == 'J' ) && (b[i] == 'J')) { ping++; continue; }
                    if ((a[i] == 'B' ) && (b[i] == 'B')) { ping++; continue; }
                    if ((a[i] == 'C' ) && (b[i] == 'B')) { lose++; bB++; continue; }
                    if ((a[i] == 'B' ) && (b[i] == 'J')) { lose++; bJ++; continue; }
                    if ((a[i] == 'J' ) && (b[i] == 'C')) { lose++; bC++; continue; }
          }
          cout << win << " " << ping << " " << lose << endl;
          cout << lose << " " << ping << " " << win << endl;
           if ((aB >= aC) && (aB >= aJ))
                   cout << 'B' << " " ;
           else if (aC >= aJ)
                   cout << 'C' << " " ;
           else
                   cout << 'J' << " " ;
           if ((bB >= bC) && (bB >= bJ))
                   cout << 'B';
           else if (bC >= bJ)
                   cout << 'C' ;
           else
                   cout << 'J' ;
          system( "pause");
           return 0;
}

  

まとめ:ネット上で他の解法を見て、自分も実はとても良い方法を考えていないで、模倣者の上の書いたことについて、ここには小さなロジック(小さなテクニックでもあるでしょう!)win[0]win[1]win[2]はこの3つの変数だけで統計を行い、当時自分が考えていたのは6つの変数で統計を行っていたが、甲が勝ったとき、乙は負けたに違いない.ハハ、バカだった.