典型的三道编程练习题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了典型的三道编程练习题相关的知识,希望对你有一定的参考价值。
第一题(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
", 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("
");//打印完一行后换行操作
}
}
int main()
{
int n = 0;
printf("亲输入要打印的杨辉三角的行数>");//此处给定基础数量的自定义操作
scanf("%d", &n);
print_yanghui(10);
return 0;
}
以上是关于典型的三道编程练习题的主要内容,如果未能解决你的问题,请参考以下文章