犯人と大会順位(C言語)

シーン:

        ある場所で殺人事件が発生し、警察は捜査の結果、容疑者4名を特定し、そのうちの1名が殺人犯であると考えられます。

Aは言いました:私ではありません

B は言いました: はい C

C は言いました: はい D

D は言いました: C はナンセンスを話しています

        1 人が嘘をつき、3 人が真実を言うことが知られていますか? 殺人者は誰ですか?

分析します:

        この問題を推論するとき、A、B、C、D を 1 人ずつ殺人犯と仮定し、「1 人が嘘、3 人が真実」の条件を満たすと判断します。

仮定A 仮定B 仮定C 仮定D
×
B × × ×
C × × ×
D ×

上の表の分析によれば、C が殺人犯であることがわかります。

コード:

int main()
{     文字キラー = 0;     for (キラー = 'A'; キラー <= 'D'; キラー++)     {         if ((キラー != 'A') + (キラー == 'C') + (キラー == 'D') + (キラー ! = 'D') == 3)         {             printf("%c\n", キラー);         0     を     返します。}









 要約:

        上記のチェックマークと間違った符号を 1 と 0 と考えます。したがって、3 つのチェックマークを直接判断すると、1+1+1+0 = 3 となります。シミュレーション結果は推論結果と同じになります。

 


シーン:

        10メートル高飛び込み競技には5名の選手が出場し、予想は以下の通り。

A は言いました: B が 2 番目、私が 3 番目

B は言いました: 私は 2 番目、E は 4 番目です

C は言いました: 私が 1 番目で、D が 2 番目です

Dは言いました:Cは最後、私は3番目です

E は言いました: 私は 4 番目、A は 1 番目です

        各プレイヤーの正解は半分だけであることが知られており、プログラミングがゲームのランキングを決定します。

分析します:

        上記の殺人犯の例によれば、各人が2つの条件を述べたと分析できます。正解と不正解が 1 つずつあります。つまり、0 と 1 が 1 つずつあります。各プレイヤーの順位は 1 ~ 5 であるため、すべての順位をリストし、条件の半分を満たしているかどうかを判断します。

コード:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	int e = 0;

	for (a = 1; a <= 5; a++)
	{
		for (b = 1; b <= 5; b++)
		{
			for (c = 1; c <= 5; c++)
			{
				for (d = 1; d <= 5; d++)
				{
					for (e = 1; e <= 5; e++)
					{
						if (((b == 2) + (a == 3) == 1) && (((b == 2) + (e == 4)) == 1)
							&& (((c == 1) + (d == 2)) == 1) && (((c == 5) + (d == 3)) == 1)
							&& (((e == 4) + (a == 1)) == 1))
						{
							if(a*b*c*d*e == 120)
								printf("a = %d;b = %d;c = %d;d =%d;e = %d\n", a, b, c, d, e);
						}
					}
				}
			}
		}
	}
	return 0;
}

 要約:

        考えられるすべての注文状況をリストし、最終条件を満たすようにします。上記が 120 になるのは、2 人が同じ順位になるのを防ぐため、1*2*3*4*5 = 120 となるためです。

おすすめ

転載: blog.csdn.net/szl__lzs/article/details/121701293
おすすめ