典型的三道编程练习题

第一题

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

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

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

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

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

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

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次
首先呢,编程的目的就是为了解决实际问题,当我们看到这道题的时候,需要跳脱出我们自己的固定思维,学会编程思维,俩者之间其实就是一个转换,大概步骤:
1,读题,了解到题目在表达什么,需要做什么,结果是要求什么
2.进行简单的分析,麻烦的,琐碎的思维留给替你打工的计算机;

代码展示;void gue***ank()//调用函数

{

int a, b, c, d, e;//int型是因为a,b.c.e.为变量,赋值12345.排名;

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 == 2) + (e == 4) == 1

                        && (c == 1) + (d == 2) == 1

                        && (d == 3) + (c == 5) == 1

                        && (e == 4) + (a == 1) == 1)//进行筛选,由题分析得到的筛选条件;代码写于此处基本已完成,可以试一下运行看结果

                    {

                        if (a * b * c * d * e != 120) //由上面结果可以得到,满足体干条件的情况里面,有重复排名的情况,此处进行这个操作,是在保证五人排名相异;

                        {

                            continue;跳出

                        }

                        printf("a = %d, b = %d, c = %d, d = %d, e = %d\n", a, b, c, d, e);//打印结果,注意格式

                    }

                }

            }

        }

    }

}

}

int main()

{

gue***ank();//函数调用,这里会发现函数其实并未传参

return 0;

}

第二题

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

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

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

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

现在请根据这些信息,写一个程序来确定到底谁是凶手
(1)问题的结果是输出凶手
(2)输出结果为A.B C D,k考虑到字符类型
(3)条件是三真一假,转化为代码如何构建

int main()
{
    char murder;
    int i = 0, sum = 0;
    for (i = 1; i <= 4; i++)
    {
        murder = 64 + i;//murder为char类型,转为ABCD
        sum = (murder != 'A') + (murder == 'C') + (murder == 'D') + (murder != 'C');
        if (sum == 3)
        {
            printf("凶手是:%c", murder);
        }
    }
    return 0;
}

第三题

杨辉三角
总结规律:
// 1. 每一行, 第一列和最后一列都是 1
// 2. 每一行, 列数, 和当前行号相同
// 3. 第 row 行 第 col 列 元素的内容, row-1行 col-1列 + row-1行 col列
// 例如, 第3行第2列值是 2 , 第 2 行第 1 列 和 第2行 第2列 和

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//
//杨辉三角
//1.首位是1;
//2.出首尾外,每次的数字为上一行,上一列所在和上一行,所在列的和;
void print_yanghui(int n)
{
    int arr[15][15] = { 0 };//此处的15是随手给的,如果需要动态变化的话,可以使用·例如malloc,
    for (int row = 1; row <= n; row++)//行的循环
    {
        for (int col = 1; col <= row; col++)//列的循环
        {
            if (col == 1 || col == row)//首尾为一
            {
                arr[row][col] = 1;
            }
            else
            {
                arr[row][col] = arr[row - 1][col - 1] + arr[row - 1][col];
            }
            printf("%d", arr[row][col]);//打印一行
        }printf("\n");//打印完一行后换行操作
    }
}
int main()
{
    int n = 0;
    printf("亲输入要打印的杨辉三角的行数>");//此处给定基础数量的自定义操作
    scanf("%d", &n);
    print_yanghui(10);
    return 0;
}

猜你喜欢

转载自blog.51cto.com/14632688/2476453