四大湖(Cプログラム設計進級2週目)


問題はわが国の4大淡水湖を説明している.
A氏は「洞庭湖が最大で、洪沢湖が最小で、鄱陽湖が3番目だ」と話した.
Bさんは「洪沢湖が一番大きく、洞庭湖が一番小さく、鄱陽湖が二番目、太湖が三番目だ」と言った.
C氏は「洪沢湖は最小で、洞庭湖は3番目だ」と話した.
D氏は、「鄱陽湖が最大で、太湖が最小で、洪沢湖が2位、洞庭湖が3位だ」と話した.
この4つの湖の大きさは等しくないことが知られており、4人は1人1つしか答えていません.
プログラミングは鄱陽湖、洞庭湖、太湖、洪沢湖の順に彼らの大きさの順位を与えてください.入力なし.出力出力は4行で、第1行為の鄱陽湖の大きさの順位は、大きい順位から小さい順位までそれぞれ1、2、3、4と表される.2行目、3行目、4行目はそれぞれ洞庭湖、太湖、洪沢湖の大きさ順だった.入力例
( )

出力例
3
2
1
4

提示この问题私の书く方法はとても愚かで、比较的に良い方法は先にすべての可能性を挙げて(A 43=24の中で、循环をして得ることができます)、更に判断をします.
#include <iostream>
using namespace std;

int main()
{
    for (int p = 1; p < 5; p++)
    {
        for (int d = 1; d < 5; d++)
        {
            if (d == p)
            {
                continue;
            }
            for (int t = 1; t < 5; t++)
            {
                if ((t==d)||(t==p))
                {
                    continue;
                }
                for (int h = 1; h < 5; h++)
                {
                    if ((h==t)||(h==p)||(h==d))
                    {
                        continue;
                    }
                    if (((d==1)+(h==4)+(p==3) == 1)&&((h==1)+(d==4)+(p==2)+(t==3) == 1)&&((h==4)+(d==3) == 1)&&((p==1)+(t==4)+(h==2)+(d==3) == 1))
                    {
                        cout << p << endl << d << endl << t << endl << h <<endl;
                    }
                }
            }
        }
    }
    return 0;
}