一、 楊輝三角
定義一個宏 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;
}