PAT B1014

3277 ワード

1014ホームズのデート(20分)
大探偵ホームズは奇妙なメモを受け取った: ! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大探偵はすぐに分かった.メモの奇妙な文字化けしは実際にはデートの時間 14:04だ.前の2つの文字列の1対目の同じ大文字の英語のアルファベット(大文字と小文字が区別されている)は4番目のアルファベットDで、木曜日を代表しているからだ.2番目のペアの同じ文字はEで、それは5番目の英語のアルファベットで、1日の14時間目を表しています(そこで1日の0時から23時まで数字の0から9、および大文字のAからNで表されます).次の2つの文字列の1対目の同じ英字sは、4分目を表す4番目の位置(0からカウント)に表示されます.2対の文字列が与えられ、ホームズがデートの時間を復号するのを助けてください.
入力形式:
4行に空欄なし、スペースなし、長さが60を超えない4つの文字列を入力します.
出力フォーマット:
1行でデートを出力する時間は、DAY HH:MMの形式で、DAYはある週の3文字の略語です.つまり、MONは月曜日、TUEは火曜日、WEDは水曜日、THUは木曜日、FRIは金曜日、SATは土曜日、SUNは日曜日です.問題入力は、各テストに一意の解があることを保証します.
サンプルを入力:
3485djDkxh4hhGE 
2984akDfkkkkggEdsb 
s&hgsfdk 
d&Hyscvnm

出力サンプル:
THU 14:04

問題解決の注意事項:
この問題はとても煩わしくて、構想は本当に難しくないと言っていますが、20点満点を取りたいです.特に試験の時、確かに非常に明確な論理と問題の意味に対する理解が必要です.水問題ですが、本当につらいです.PATの典型的な文字ゲームの問題は、私も多くの人の答えを参考にしましたが、すべての試験点をカバーする穴はありません.具体的な穴は以下の通りです.
1.1,2と3,4の2つの文字列のうち、最も短い長さの値を使用して次のループを実行する必要があります.そうしないと、問題が発生します(文字列に対してstringを使用してstringの.length()を直接利用して長さを判断します).
2.曜日については、A~G間の文字を先に判断する必要があり、ここでは区間が誤りやすい
3.何時(時間)に対して、0~9とA~Nの2つの区間を判断する必要があり、ここでの区間は誤りやすい.出力するときは、10未満は前に0を足す
4.最初のグループ(つまり、1、2行の文字列)は、まず曜日を判断してから、具体的な何時かを判断する必要があるので、まず曜日を見つけてから、何時かを検索しなければなりません.ここでは順番が必要です
5.数分(分)については、a~zとA~Zの2つの区間を判断する必要があり、ここで区間は誤りやすい.出力するときは、10未満は前に0を足す
6.本題の解は、各グループの中で最初に条件を満たす解が正解であるため、各グループがループ検索を行う場合、必要なbreakが見つかった場合、後で前の条件を満たす値が現れて正しい値が置き換えられる
#include
#include
#include

using namespace std;

int main()
{
    string Day[8] =
    {
        "MON","TUE","WED","THU","FRI","SAT","SUN"
    };
    string a,b,c,d;
    cin>>a>>b>>c>>d;

    int l1 = a.length()>b.length()?b.length():a.length();
    int l2 = c.length()>d.length()?d.length():c.length();
    //                       
    int s;

    int flag = 0;//  flag           
    int t;
    for(int i = 0; i < l1; i++)
    {
        if(a[i]==b[i])
        {
            if(!flag&&'A'<=a[i]&&a[i]<='G')
            {
                s=a[i]-'A';
                flag++;
            }
            else if(flag)
            {
                if('A'<=a[i]&&a[i]<='N')
                {
                    t = a[i] - 'A' + 10;
                    break;
                }

                else if('0'<=a[i]&&a[i]<='9')
                {
                    t = a[i] - '0';
                    break;
                }
            }
        }
    }

    int num;
    for(int i = 0; i < l2; i++)
    {

        if(c[i]==d[i])
        {
            if(('a'<=c[i]&&c[i]<='z')||('A'<=c[i]&&c[i]<='Z'))
            {
                num=i;
                break;
            }
        }
    }

    cout<