溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行C語言猜兇手及類似題目的實現(xiàn)

發(fā)布時間:2022-01-10 14:43:42 來源:億速云 閱讀:176 作者:柒染 欄目:開發(fā)技術

這期內容當中小編將會給大家?guī)碛嘘P如何進行C語言猜兇手及類似題目的實現(xiàn),文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

    描述:

    日本某地發(fā)生了一件謀殺案,警察通過排查確定殺人兇手必為4個嫌疑犯的一個。

    以下為4個嫌疑犯的供詞:

    A說:不是我。        

    B說:是C。

    C說:是D。

    D說:C在胡說

    已知3個人說了真話,1個人說的是假話。

    現(xiàn)在請根據(jù)這些信息,寫一個程序來確定到底誰是兇手。

    思路及分析:

            從來沒有做過類似題目的同學第一次看見這道題,可能有點發(fā)懵。然后開始考慮假設,排列組合,枚舉等等...但是這道題的代碼結果會讓你大吃一驚。

            首先,要考慮的是如何用代碼表示A,B,C,D這四個人說的話?我們定義一個char變量killer來表示兇手。最能想到的就是如果某個人說的話是成立的話,將他的結果為1(類似于bool類型),否則就是0。這樣的想法是正確的。A說,不是A,那么,可以表示為killer != ‘A’。判斷成立的話,他就會返回1,否則,返回0。類似的,其他3個人說的話也可以這樣來表示。最后,根據(jù)3個人說了真話,1個人說了假話得知返回的總和為3。比如,我們假設A就是兇手,那么根據(jù)四個人說的話,A說了假話,B也說了假話,和條件是不符合的。這樣之后,只是判斷了A的情況,B,C,D的情況還沒有判斷,只需要加一個循環(huán)就可以了。

            C語言代碼如下:

    #include<stdio.h>
     
    int main(void)
    {
    	char killer = 'A';
    	for (killer = 'A'; killer <= 'D'; killer++)
    	{
    		if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
    		{
    			printf("the killer is %c", killer);
    		}
    	}
     
    	return 0;
    }

            結果如下:

    如何進行C語言猜兇手及類似題目的實現(xiàn)

    現(xiàn)在,我們來看和它相似的第二道題目:

    描述:

            兩個乒乓球隊進行比賽,甲隊為ABC三人;乙隊為XYZ三人;抽簽決定比賽名單,有人向隊員打聽比賽的名單,A說他不和X比,C說他不和Z比。請編程輸出所有可能的對陣方案,并統(tǒng)計方案的個數(shù)。

    思路及分析:

            這道題和猜兇手那道題目的方法是一致的,都是直接把題目的文字描述轉換為代碼描述。直接使用 for循環(huán)即可。代碼如下:

    #include<stdio.h>
     
    int main(void) 
    {
    	char A = 0;
    	char B = 0;
    	char C = 0;
    		for (A = 'X'; A <= 'Z'; A++)
    		{
    			for (B = 'X'; B <= 'Z'; B++)
    			{
    				for (C = 'X'; C <= 'Z'; C++)
    				{
    					if ((A != 'X') + (C != 'Z')  == 2)
    					{
    						if (A != B && B != C && C != A)
    						{
    							printf("A VS %c, B VS %c, C VS %c\n", A, B, C);
    						}
    						
    					}
    				}
    			}
    		}
    	return 0;
    }

            結果如下:

    如何進行C語言猜兇手及類似題目的實現(xiàn)

    第三道題目:

    描述:

    5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果:

    A選手說:B第二,我第三;

    B選手說:我第二,E第四;

    C選手說:我第一,D第二;

    D選手說:C最后,我第三;

    E選手說:我第四,A第一;

    比賽結束后,每位選手都說對了一半,請編程確定比賽的名次。

    思路及分析:

            暴力破解法即可。代碼如下:

    #include<stdio.h>
     
    int main(void)
    {
    	int a = 0, b = 0, c = 0, d = 0, 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第二,我第三
    							((b == 2) + (e == 4) == 1) && //我第二,E第四
    							((c == 1) + (d == 2) == 1) && //我第一,D第二
    							((c == 5) + (d == 3) == 1) && //C最后,我第三
    							((e == 4) + (a == 1) == 1))   //我第四,A第一
    						{
    							if (a * b * c * d * e == 120)
    							{
    								printf("%d %d %d %d %d\n", a, b, c, d, e);
    							}	
    						}
    					}
    				}
    			}
    		}
    	}
    	return 0;
    }

    如何進行C語言猜兇手及類似題目的實現(xiàn)

    最后一道題目來看,出現(xiàn)了驚人的五個for循環(huán)。同時,每一個for循環(huán)都是循環(huán)5次,時間復雜度達到了O(n * n)。也就是說,一旦要判斷的人數(shù)增多,計算機的計算速度將會以肉眼可見的速度慢下去。

    上述就是小編為大家分享的如何進行C語言猜兇手及類似題目的實現(xiàn)了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

    AI