机智的小明———有点儿意思的代码

文章描述了一个编程问题,涉及如何通过嵌套循环比较小明的考试成绩,以判断他是否有进步。程序的核心逻辑是使用三个for循环来找出之前的成绩并确定回答Y或N。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上图片

小明的妈妈非常关心小明的成绩,每次考试后都会问小明是否进步了。机智的小明会努力找出之前比这次成绩低的试卷
进行比较,如果找到了,他会回答妈妈自己进步了(Y),如果没找到,他只能回答妈妈没进步(N)。已知小明的n次
成绩,请问每次妈妈询问小明,小明的回答是怎么样的。e 
时间限制:1000- 
内存限制:65536 
输入e 

输入为2行,第1行是一个整数n(n<100),即考试成绩的数量,第二行是n个整数,即每次考试成绩。输入保证n不
大于100,考试成绩在0到100之间。一
输出e 
n行,每行是小明的回答(Y或N)

提示
对于每一次成绩,只要之前的成绩有任意一次成绩比当前成绩低,就输出Y,否则输出N

直接上代码,核心就是三个for嵌套

#include<stdio.h>

int main() {
	int kaoshi_geshu;
	int score [10];  //用来存放输入的成绩
	char fina [10];  //存放比较后的结果
	fina[0] = 'N'; //第一位因为没有分数可以和他比较,所以初始直接为N; 

	printf("输入考试成绩的个数\n");
	scanf("%d", &kaoshi_geshu);

	int i;
	for (i = 0; i < kaoshi_geshu; i++) {
		printf("第%d次成绩\n", (i + 1));
		scanf("%d", &score[i]);
	}
	int j, k, l;
	for (j = 0; j < kaoshi_geshu; j++) {	//第一个循环是循环的次数,5个分数就循环5次; 
		for (k = 1; k < kaoshi_geshu; k++) {	//第二个循环是决定比较的一个分数,第一位,第二位等;因为第一位没有数可以和他比较,所以直接从第二位开始; 
			for (l = 0; l < k; l++) {	//第三个循环是被比较的分数; 
				if (score[l] > score[k]) {
					fina[k] = 'Y';
					break;		//如果前面已经有一位分数比现在分数高就直接退出循环; 
				}
			}
			if (fina[k] != 'Y') {	//如果fina[k]没有被赋值为Y,说明前面的任意一个分数没有比现在的分数大,所以赋值为N; 
				fina[k] = 'N';
			}
		}
	}

	int n;
	for (n = 0; n < kaoshi_geshu; n++) { //循环输出结果; 
		printf("%c\n", fina[n]);
	}
	return 0;
}

如果想更多的分数去比较就扩大这两个数组长度,我这里弄了十个。fina的长度要>=score的长度。

	int score [10];  //用来存放输入的成绩
	char fina [10];  //存放比较后的结果

因为没有分数可以和第一个分数比较,所以就是没有进步,也就是‘N’

fina[0] = 'N'; //第一位因为没有分数可以和他比较,所以初始直接为N; 

分别输入成绩的个数和每次考试成绩的分数

printf("输入考试成绩的个数\n");
	scanf("%d", &kaoshi_geshu);

	int i;
	for (i = 0; i < kaoshi_geshu; i++) {
		printf("第%d次成绩\n", (i + 1));
		scanf("%d", &score[i]);
	}

核心部分:数据处理(三个for嵌套),重点理解每个for的作用是什么就好了。

int j, k, l;
	for (j = 0; j < kaoshi_geshu; j++) {	//第一个循环是循环的次数,5个分数就循环5次; 
		for (k = 1; k < kaoshi_geshu; k++) {	//第二个循环是决定比较的一个分数,第一位,第二位等;因为第一位没有数可以和他比较,所以直接从第二位开始; 
			for (l = 0; l < k; l++) {	//第三个循环是被比较的分数; 
				if (score[l] > score[k]) {
					fina[k] = 'Y';
					break;		//如果前面已经有一位分数比现在分数高就直接退出循环; 
				}
			}
			if (fina[k] != 'Y') {	//如果fina[k]没有被赋值为Y,说明前面的任意一个分数没有比现在的分数大,所以赋值为N; 
				fina[k] = 'N';
			}
		}
	}

最后遍历一遍fina就行

int n;
	for (n = 0; n < kaoshi_geshu; n++) { //循环输出结果; 
		printf("%c\n", fina[n]);
	}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值