1、日本某地發生了一件謀殺案,根據供詞及其真假情況寫一個程式來確定到底誰是凶手 2、根據運動員的預測結果及其預測的正確情況,寫程式確定名次
阿新 • • 發佈:2020-12-13
1、 日本某地發生了一件謀殺案,警察通過排查確定殺人凶手必為4個嫌疑犯的一個。以下為4個嫌疑犯的供詞:A說:不是我。B說:是C。C說:是D。D說:C在胡說。已知3個人說了真話,1個人說的是假話。現在請根據這些資訊,寫一個程式來確定到底誰是凶手。
程式碼思路:首先建立一個字元變數murderer表示凶手,讓其從A到D遍歷。然後將四個人的供詞用表示式寫出來,相加,放入if語句的判斷條件中,三真一假(即為3)。能滿足條件進入if語句的murderer即為凶手。
A的供詞:murderer != ‘A’;
B的供詞:murderer == ‘C’;
C的供詞:murderer == ‘D’;
int main()
{
char m = 0;
for (m = 'A'; m <= 'D'; m++)
{
if ((m != 'A') + (m == 'C') + (m == 'D') + (m != 'D') == 3)//if的括號裡表示式是真則為1,假則為0
{
printf("the murderer is %c\n", m);
}
}
return 0;
}
執行結果:
2、5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果:A選手說:B第二,我第三;B選手說:我第二,E第四;C選手說:我第一,D第二;D選手說:C最後,我第三;E選手說:我第四,A第一;比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。
程式碼思路:與上個問題類似,先建立5個整形變數a、b、c、d、e表示五位運動員A、B、C、D、E的名次。再將它們依次從第一名~第五名(即1到5)遍歷。然後將5名運動員的預測結果用表示式寫出來,放入if語句的判斷條件中去。能滿足條件進入if語句的a、b、c、d、e就是正確排名
注意:這裡除了運動員的預測結果,還有一個隱含條件:五名運動員的名次各不相同,分別為1、2、3、4、5
由於每位選手都只說對了一半,因此每位選手預測的兩個名次中一個為真,一個為假。表示式相加為1:
A:(b == 2) + (a == 3) == 1
B:(b == 2) + (e == 4) == 1
C:(c == 1) + (d == 2) == 1
E:(e == 4) + (a == 1) == 1
隱含條件:
a * b * c * d * e == 120(注意:不能表示為a+b+c+d+e==15,當他們的和為15時也可能名次重複,例如:1、2、2、5、5)
int main()
{
int a = 0; //建立5個變量表示各選手名次
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 ((a == 3) + (b == 2) == 1 &&
(b == 2) + (e == 4) == 1 &&
(c == 1) + (d == 2) == 1 &&
(c == 5) + (d == 3) == 1 &&
(a == 1) + (e == 4) == 1 &&
(a*b*c*d*e==120))//a、b、c、d、e各不相等,它們分別為1~5,故它們的乘積必為120
{
printf("a=%d, b=%d, c=%d, d=%d, e=%d\n", a, b, c, d, e);
}
}
}
}
}
}
return 0;
}
執行結果: