5-24課堂代碼

一、 楊輝三角

	定義一個宏 N ,用來定義二維數組這個N可以根據所要打印的楊輝三角的行數進行調整,稍微大於所要打印的行數即可,在此我使用了 100.
	EXIT_SUCCESS  是定義在頭文件 <stdlib.h> 中的一個宏,有興趣的同學可以用  VS  轉到定義進行查看,其值爲 0
#include <stdio.h>
#include <stdlib.h>

//在屏幕上打印楊輝三角。

#define N 100
void ShowYang()
{
	int i;//行號
	int j;
	int k;//打印空格
	int n = 0;//要打印的行數
	int arr[N][N];

	printf("請輸入要打印的行數——>");
	scanf("%d", &n);

	printf("%d行楊輝三角打印如下:\n", n);
	for (i = 1; i <= n; i++)
	{
		arr[i][1] = 1;//每一列第一個數字爲1
		arr[i][i] = 1;//對角線數字爲1
	}
	for (i = 3; i <= n; i++)
	{
		for (j = 2; j <= i - 1; j++)
		{
			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
		}
	}//存儲數字
	for (i = 1; i <= n; i++)//打印空格
	{
		for (k = 1; k <= n - i; k++)
		{
			printf("   ");
		}
		for (j = 1; j <= i; j++)
		{
			printf("%6d", arr[i][j]);
		}
		puts("");
	}
}
int main()
{
	ShowYang();
	return EXIT_SUCCESS;
}

二、 猜兇手

兇手在 a 到 d 之間,可以用一個for循環來進行逐個排查,同時4個人所說的條件加起來得有三個爲真,可用語句
if (3 == (killer != 'a') + ('c' == killer) + ('d' == killer) + ('d' != killer))

實現判斷。

//日本某地發生了一件謀殺案,警察通過排查確定殺人兇手必爲4個嫌疑犯的一個。
//以下爲4個嫌疑犯的供詞:
//A說:不是我。
//B說:是C。
//C說:是D。
//D說:C在胡說
//已知3個人說了真話,1個人說的是假話。
//現在請根據這些信息,寫一個程序來確定到底誰是兇手。
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int killer = 0;
	for (killer = 'a'; killer <= 'd'; killer++)
	{
		if (3 == (killer != 'a') + ('c' == killer) + ('d' == killer) + ('d' != killer))
		{
			printf("killer:%c\n", killer);
		}
	}
	return EXIT_SUCCESS;
}

三、 猜名次

無並列就很簡單了,即名次爲1,2,3,4,5 。判斷條件可以用5個人的名次相乘是否爲 120 來判定。
有並列就稍微有些複雜,由於5個人每個人說的話都只有一半爲真,則可進行一次判定
if ((1 == (b == 2) + (3 == a)) && (1 == (2 == b) + (4 == e)) && (1 == (1 == c) + (2 == d)) && (1 == (5 == c) + (3 == d)) && (1 == (4 == e) + (1 == a)))

使其判定每個人說的話只有一半爲真成立
在定義一個無符號 char 型變量(有符號也行,因爲只有5個人,最多佔用後面五位)
在這裏插入圖片描述

#include <stdio.h>
#include <stdlib.h>
//5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果:
//A選手說:B第二,我第三;
//B選手說:我第二,E第四;
//C選手說:我第一,D第二;
//D選手說:C最後,我第三;
//E選手說:我第四,A第一;
//比賽結束後,每位選手都說對了一半,請編程確定比賽的名次。
int main()
{
	int a, b, c, d, e;
	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 (120 == a * b * c * d * e)//無並列名次
						//{
						//	if ((1 == (b == 2) + (3 == a)) && (1 == (2 == b) + (4 == e)) && (1 == (1 == c) + (2 == d)) && (1 == (5 == c) + (3 == d)) && (1 == (4 == e) + (1 == a)))
						//	{
						//		printf("a = %d,b = %d,c = %d, d = %d,e = %d\n", a, b, c, d, e);
						//	}
						//}

						//有並列
						if ((1 == (b == 2) + (3 == a)) && (1 == (2 == b) + (4 == e)) && (1 == (1 == c) + (2 == d)) && (1 == (5 == c) + (3 == d)) && (1 == (4 == e) + (1 == a)))
						{
							unsigned char flag = 0;
							flag |= 1 << (a - 1);
							flag |= 1 << (b - 1);
							flag |= 1 << (c - 1);
							flag |= 1 << (d - 1);
							flag |= 1 << (e - 1);

							if ((2 == flag + 1) || (4 == flag + 1) || (8 == flag + 1) || (16 == flag + 1) || (32 == flag + 1))
							{
								printf("a = %d,b = %d,c = %d, d = %d,e = %d\n", a, b, c, d, e);
							}
						}
					}
				}
			}
		}
	}
	return EXIT_SUCCESS;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章