題目:
A選手說:B第二,我第三;
B選手說:我第二,E第四;
C選手說:我第一,D第二;
D選手說:C最后,我第三;
E選手說:我第四,A第一;
比賽結束后,恰好每位選手都說對了一半,請用編程實作他們的名次
分析:
通過以上所給,我明知道五位選手每個人剛好說對一半,但是是哪一半我們不知道,我們知道在我們的計算機中,對為1,不對為0,只要我們每位選手的兩個預測相加都恰好等于1,那條件就成立了,接下來我們動手寫程式,
#include <stdio.h>
#include <stdlib.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))
{
//如果就按以上步驟去輸出結果的話你會發現,輸出了多種結果,如圖1所示(在下面),這是因為每個名次只能有一位選手取得,這一點我們沒有考慮到,如果讓每位選手取得的成績相乘(1*2*3*4*5)恰好等于120,這時候結果就唯一了
if (a*b*c*d*e==120)
printf("a=%d b=%d c=%d d=%d e=%d\n", a, b, c, d, e);
}
}
}
}
}
}
system("pause");
return 0;
}
圖1

最終我們得到的結果是

回到最開始的預測,細心的朋友可能就會發現,C預測自己拿第一,結果卻是倒數第一,真是個大預言家哈!
最后祝大家生活愉快,作業學習都第一!
<<<<<<博主都細的看不清了,確定不留個贊再走?>>>>>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265358.html
標籤:其他
