C语言经典问题—猜名次、猜凶手和杨辉三角

简介: C语言经典问题—猜名次、猜凶手和杨辉三角

一、猜名次问题


题目内容


5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

A选手说:B第二,我第三;

B选手说:我第二,E第四;

C选手说:我第一,D第二;

D选手说:C最后,我第三;

E选手说:我第四,A第一;

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。


解决思路和代码


思路:暴力解决,通过 嵌套循环 列出所有可能性,从A选手为第一名、第二名........的每一种可能进行判断,当满足条件时,将结果输出。

int main()
{
int A, B, C, D, E;
for (A = 1; A < 6; A++)
{
    for (B = 1; B < 6; B++)
    {
         for (C = 1; C < 6; C++)
         {
           for (D = 1; D < 6; D++)
            {
                for (E = 1; E < 6; 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 &&
                        A * B * C * D * E == 120)  //确保ABCD选手的排名不会重复
                        printf("%d %d %d %d %d\n", A, B, C, D, E);
                }
             }
         }
    }
}
}


存在选手排名相同,也会满足条件,所以确定A*B*C*D为固定值,从而使结果只有一种(无重复的结果


二、找凶手问题

题目内容


日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

以下为4个嫌疑犯的供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

现在请根据这些信息,写一个程序来确定到底谁是凶手。


解决思路和代码


思路:假设凶手为A,再通过 题目条件 判断是否成立,如果成立则输出结果,如果不成立则再假设B、C、D。


int main()
{
    char killer = ' ';
    for (killer = 'A'; killer <= 'D'; killer++)
    {
        if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
        {
            printf("killer is %c", killer);
        }
    }
    return 0;
}



提前假设凶手,再通过题目条件,判断,是否三人说真话,1人说假话 成立


三、 杨辉三角问题


题目内容


在屏幕上打印杨辉三角

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

……

解决思路和代码


思路:杨辉三角,每一行的第一个数和最后一个数为1,其余数皆是它左上方和正上方的数的和。也可以理解为,两端元素为1,只需要修改中间元素

二维数组可以寻找数的左上方和正上方的数,从而进行相加。

int main()
{
    int arr[100][100] = { 0 };
    int a = 0;
    scanf("%d", &a);    //输入行数
    //写一个框架,全为1
    for (int c = 0; c < a; c++)
    {
        for (int k = 0; k <= c; k++)
        {
            arr[c][k] = 1;
        }
    }
    //当行数超过2行时,开始修改中间元素
    for (int c = 2; c < a; c++)
    {
        for (int k = 1; k < c; k++) //因为只需要修改中间元素,k等于1,相当于从每一行第二个元素进行修改
        {                            //当k<c时,也就是说每一行的最后一个数不需要修改,依然为1
            arr[c][k] = arr[c - 1][k - 1] + arr[c - 1][k];
        }
    }
    for (int c = 0; c < a; c++)
    {
        for (int k = 0; k <= c; k++)
        {
            printf("%d ", arr[c][k]);
        }
        printf("\n");
    }
}


目录
相关文章
|
8月前
|
C语言
C语言之输出杨辉三角的教程
C语言之输出杨辉三角的教程
|
10月前
|
C语言
用C语言解决实际问题之买汽水、猜凶手(名次)
用C语言解决实际问题之买汽水、猜凶手(名次)
55 0
|
20天前
|
C语言
C语言第四十七弹---猜凶手
C语言第四十七弹---猜凶手
|
6月前
|
C语言
C语言十五弹---打印杨辉三角
C语言十五弹---打印杨辉三角
|
7月前
|
存储 算法 C语言
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
53 0
|
10月前
|
存储 C语言
【C语言练习】杨氏矩阵、杨辉三角
【C语言练习】杨氏矩阵、杨辉三角
50 0
|
10月前
|
C语言
【C语言练习】求名次、找凶手
【C语言练习】求名次、找凶手
58 0
|
11月前
|
C语言
C语言:猜凶手
题目: 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。
|
11月前
|
C语言
C语言:猜名次
题目: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三;
|
6天前
|
存储 C语言
向函数传递结构体: C语言中的结构体参数传递详解
向函数传递结构体: C语言中的结构体参数传递详解
20 0