1樓:
1、首先是將五個人的**寫成表示式:
讓關係運算子 “==” 的含義是 “是”。
讓數字 1、2、3、4、5 分別表示名次。
讓整型變數 a、b、c、d、e 分別存放每個選手所得名次。
a選手說:b==2,a==3;
b選手說:b==2,e==4;
c選手說:c==1,e==2;
d選手說:c==5,d==3;
e選手說:e==4,a==1;
2、考慮到每個人說的話是一對一錯,即一真一假,比如a說的(b==2)+(a==3)應該是 1。
1+0=1
0+1=1
所以可以得到以下表示式:
ta= ((b==2)+(a==3))==1;
tb= ((b==2)+(e==4))==1;
tc= ((c==1)+(d==2))==1;
td= ((c==5)+(d==3))==1;
te = ((e==4)+(a==1))==1;
ta+tb+tc+td+te==5
3、每個人的名次是不同並且都是屬於,那麼我們就可以得到以下表示式:
a+b+c+d+e=15
a*b*c*d*e=120
4、通過列舉,多重迴圈即可得到滿足以上條件的a、b、c、d、e的值。
**如下:
#include
using namespace std;
int a,b,c,d,e;
void main()
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+b+c+d+e)==15)
if ((a*b*c*d*e)==120)if (((b==2||a==3)+(b==2||e==4)+(c==1||d==4)+(c==5||d==3)+(e==4||a==1))==5)
2樓:匿名使用者
1 2 3 4 5
a說: b a
b說: b e
c說: c d
d說; d c
e說: a e
插圖比較麻煩,講究著看。
他們說的都是一半對一半錯,那麼我們就用假設法。
1:假設a說的當中a第三是對的-->那麼d說的d第三就錯-->則d說的c第五就對-->則c說的c第一就錯-->則c說的d第四就對,這樣我們就確定了a-3,d-4,c-5.
另一邊,a說a三對,-->則a說b是第二就錯-->b說的b是第二就錯-->b說的e是第四就對,而上面已經推出了d是第四,兩者相矛盾,所以就是錯了咯。
2:根據第一點推斷的,知道a說的b是第二十正確的,就根據這樣推就行了,結果是a b e d c.
當然,上面是我推出來了,所以直接先判的a說a第三是對,這樣就可以排除這種可能,但在寫**的過程中就需要你分很多種的情況去分析,說白了,也就是不斷的用if else if else....加上"||"和"&&"去做判斷,所以要比較的細心點要考慮到全面的情況。**就不寫了,我也嫌麻煩。
3樓:剎那v永恆
建議做一下八皇后,和這個一個道理……我得關機了,明天晚上給你寫程式
4樓:匿名使用者
窮舉,然後分別判斷每個人描述的是否是一個對一個錯,如果全滿足就可以輸出結果。
新手學習dsp的c語言程式設計請高手指點
c6713沒用過,我用過tms320f2812的晶元。建議你先熟悉一下ccs開發環境,然後再認真的看 ti的dsp,封裝了很多的標頭檔案,沒有必要全部都要看看標頭檔案裡是怎麼寫的。最好先把整個程式的執行流程看懂。然後結合晶元手冊,看看每一步怎麼做的,是如何通過配置暫存器 如何使用外設等等。關鍵還是看...
高分求助c語言中的錯誤(本人是新手)
printf 請輸入第二個集合 n for j 0 j 5 j scanf d b i scanf d b j 程式太長,你改改上面試試,看看是不是你要的結果 如果還不行,建議你單步執行看看,程式的東東,自己除錯出來才有成就感 include void main 集合的並運算 for i 0 i 5...
C語言現在在程式設計界是個什麼地位,用C語言可以進行有介面的程式設計嗎
如果說c語言沒用了,我可不贊同了 c語言既具有高階語言的特點又具低階語言的特點,既可以用來編寫系統軟體,也可以用來編寫應用軟體.如果你想學習更高階的程式語言,c語言是絕對的敲門磚 我學c語言的第一天,我的老師就跟我說了,要想學會程式設計,c語言就首先得搞結實了.vc 還是很有市場的。其實學習c關鍵是...