トピック:
日本の某所で殺人事件が発生し、警察は捜査の結果、犯人は容疑者4人のうちの一人であると断定した。
容疑者4人の自白は以下の通り。
A は言いました:私ではありません。
Bは言いました:それはCです。
Cは言いました:はい、 D.
Dは言いました: C はナンセンスを話しています
3人が真実を語り、1人が嘘をついたことがわかっている。
次に、この情報に基づいて殺人者が誰であるかを決定するプログラムを書いてください。
================================================= =======================
アイデア:
一般的なアイデア:
次に、各人が殺人者であると仮定して裁きます。
4 人の発言が1 つ嘘、3 つ真実かどうかを確認すると、仮想の人物が殺人者であることが証明されます。
変数を定義します。
文字キラー = 0 ; --キラー
abcdのASCIIコード値がつながっているので、
つまり、a+1=bなどとなり、全員が順番に殺人者であると仮定して、状況を判断します。
( for ループを使用して、各人が順番に殺人者であると仮定します)
4つの文と4つの状況をリストアップし、
ケース1 false 3 true、true は 1、false は 0、
4 件の「加算」 == 3、
(if条件判定文を使って実現します)
つまり、現在想定されている人物が殺人者であり、
ワンステップで完了します:
(1)。
変数を定義します。
文字キラー = 0 ; --キラー
(2)。
abcdのASCIIコード値がつながっているので、
つまり、a+1=bなどとなり、全員が順番に殺人者であると仮定して、状況を判断します。
( for ループを使用して、各人が順番に殺人者であると仮定します)
(3)。
4つの文と4つの状況をリストアップし、
ケース1 false 3 true、true は 1、false は 0、
4 件の「加算」 == 3、
(if条件判定文を使って実現します)
つまり、現在想定されている人物が殺人者であり、
実装コード:
#include <stdio.h> int main() { //定义变量: char killer = 0; //凶手 //依次假定每个人是凶手: for (killer = 'a'; killer <= 'd'; killer++) //因为 a b c d 的ASCII码值是连着的,所以a+1==b, //以此类推,依次假定每个人是凶手,判断情况 { //把4个情况列出来: if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3) //把4句话,4个情况列出来,情况1假3真,真为1,假为0,4种情况“相加”==3,符合就是凶手进行打印 { //符合则进行打印 printf("凶手是:%c\n", killer); break; } } return 0; }
イメージを実現してください:
(注: for ループの判定条件はKiller <= 'd'です)
最終的なコードと実装効果
最終コード:
#include <stdio.h> int main() { //定义变量: char killer = 0; //凶手 //依次假定每个人是凶手: for (killer = 'a'; killer <= 'd'; killer++) //因为 a b c d 的ASCII码值是连着的,所以a+1==b, //以此类推,依次假定每个人是凶手,判断情况 { //把4个情况列出来: if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3) //把4句话,4个情况列出来,情况1假3真,真为1,假为0,4种情况“相加”==3,符合就是凶手进行打印 { //符合则进行打印 printf("凶手是:%c\n", killer); break; } } return 0; }
効果を実感してください: