放在最前面的
? ? 我的CSDN主页:OTWOL的主页,欢迎!!!????
??我的C语言初阶合集:C语言初阶合集,希望能帮到你!!!? ?
????创作不易,欢迎大家留言、点赞加收藏!!! ???
文章目录
放在最前面的前言一、猜凶手题目描述:解题思路:代码如下(示例):输出结果(示例): 二、杨辉三角题目描述:解题思路:代码如下(示例):输出结果(示例): 三、猜名次题目描述:解题思路:代码如下(示例):输出结果(示例): END:总结
前言
本篇博客是通过三道题目来让你真正了解和学会
使用 for
循环是如何解决生活实际问题和数学问题的!
一、猜凶手
题目描述:
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
解题思路:
通过对题目的阅读后,我们知道杀人凶手 就在 A B C D这四个人之间的某一个;
所以:
(1)首先我们可以通过 一 一 列举的办法,假设杀人凶手 是A、 B 、C或者 D;
(2)然后进行判断是否满足题目说的他们的供词的 “3个人说了真话,1个人说的是假话”的条件;
(3) 从而 推理得到 真正的杀人凶手 。
代码如下(示例):
#include<stdio.h>int main(){//定义一个字符型变量 killer,用于存放凶手char killer = 'A';//循环生成 'A','B','C','D';for (killer = 'A'; killer <= 'D'; killer++){//判断是否满足题目的条件if ( ( (killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') ) == 3 ){//输出printf("killer = %c\n", killer);}}return 0;}
输出结果(示例):
二、杨辉三角
题目描述:
在屏幕上打印杨辉三角。
1
1 1
1 2 1
1 3 3 1
……
解题思路:
通过对题目的阅读后,
我们可以通过一个二维数组的形式进行打印杨辉三角;
可以用 r 表示 行,c 表示 列
通过观察知道:
(1)第一列的元素都是 1,并且当 r (行)== c(列) 的时候,元素也是 1 ;
(2)其他位置上的元素是 由该位置 上面位置的元素 + 左上角的元素的和。
代码如下(示例):
#include<stdio.h>int main(){//定义一个二维数组int arr[10][10] = { 0 };//定义一个整型变量 n ,用于要输入的数字int n = 0;//输入scanf("%d", &n);//定义一个整型变量 r,用于要循环控制的 行数int r = 0;//定义一个整型变量 c,用于要循环控制的 列数int c = 0;//外循环,控制 行数for (r = 0; r < n; r++){//内循环,控制 列数for (c = 0; c <= r; c++){//判断 第一列的元素 和 行 == 列if ((c == r) || (c == 0)){//赋值arr[r][c] = 1;}//判断(除去 第一列的元素和行 == 列)其他位置上的元素if ((r >= 2) && (c < r)){//赋值arr[r][c] = arr[r - 1][c] + arr[r - 1][c - 1];}}}外循环,控制 行数for (r = 0; r < n; r++){//内循环,控制 列数for (c = 0; c <= r ; c++){//输出printf("%5d ", arr[r][c]);}//每输出一行,进行换行printf("\n");}return 0;}
输出结果(示例):
三、猜名次
题目描述:
5 位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
解题思路:
通过对题目的阅读后,我们知道 每个人的名次可能是 1 ~ 5 的一个。
所以:
(1)首先我们可以通过 一 一 列举的办法,将每个人的 名次 列出来;
(2)然后进行判断是否满足题目说的 “每位选手都说对了一半”的条件;
(3) 最后还要加上每个人只能有一个名次,即(a * b * c * d * e) == 120
(4) 从而 得到每个人比赛最终的名次 。
代码如下(示例):
#include<stdio.h>int main(){//定义五个整型变量,用于存放 5个运动员的名次int a = 0;int b = 0;int c = 0;int d = 0;int e = 0;//把 a b c d e 五个人可能出现的每次进行 一 一列举出来for (int a = 1; a <= 5; a++){ for (int b = 1; b <= 5; b++){for (int c = 1; c <= 5; c++){for (int d = 1; d <= 5; d++){for (int e = 1; e <= 5; e++){//判断是否满足下面的判断条件if ( ((b == 2) + (a == 3) == 1)&& ((b == 2) + (e == 4) == 1)&& ((c == 1) + (d == 2) == 1)&& ((c == 5) + (d == 3) == 1)&& ((a == 1) + (e == 4) == 1)&& ((a * b * c * d * e) == 120)){//输出名次printf("a = %d\n", a);printf("b = %d\n", b);printf("c = %d\n", c);printf("d = %d\n", d);printf("e = %d\n", e);}}}}}}return 0;}
输出结果(示例):
END:总结
每天都在学习的路上!
On The Way Of Learning
以上就是今天要讲的内容,本文简单介绍了用for
循环解决生活实际问题(猜凶手、猜名次)和数学问题(杨辉三角);
或我的小思路还有成长的空间哦!? 诚挚邀请各位编程大侠,一起来晒出你们那闪耀着智慧光芒的优质代码吧!✨
你的精彩分享,将是我们共同进步的最强动力!?