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语言,c语言)