第一届 “勤练杯” 小白日常赛 Round 2题解

admin 2023-01-13 13:42:13

本次比赛赛题来自NOIP2018山东小学组
1.小明的照片
参考代码:
#include <stdio.h>
int main() {
	int n, x, y, z;
	scanf("%d%d%d%d", &n, &x, &y, &z);
	n -= (x+y+z);
	printf("%d\n", n);
	return 0;
}
本题过于简单,无解析内容
题目传送门:小明的照片
2. 快递费用
参考代码:
#include <stdio.h>
int w, no;
int main() {
	int total = 20, ow;
	scanf("%d%d", &w, &no); 
	if(w <= 500) goto loop; //第一种情况,重量在500克以内
	else { //重量超过500克
		w -= 500;
		ow = w/500; //多的部分每500克加收一份费用
		if(w%500 != 0) ow += 1; //不足500克的部分加收一份费用
		switch(no) { //用switch语句进行判断不同地区加收费用不同
			case 1: total += (ow*4); break;
			case 2: total += (ow*6); break;
			case 3: total += (ow*9); break;
			case 4: total += (ow*10); break;
			case 5: total += (ow*17); break; 
		}
	}
	loop: printf("%d\n", total); //输出费用
	return 0;
}
分支结构,分支内部使用switch语句方便处理
题目传送门:快递费用
3.统计成绩
参考代码:
#include <stdio.h>
int n, a, b, c, d;
int main() {
	int i, x;
	scanf("%d", &n);
	for(i = 1; i <= n; i++) {
		scanf("%d", &x); //循环输入
		if(x >= 90) a++; //90分(含)及以上,优秀
		else if(x >= 80 && x < 90) b++; //80~89分,良好
		else if(x >= 60 && x < 80) c++; //60~79分,及格
		else d++; //不及格
	}
	printf("%d\n%d\n%d\n%d\n", a, b, c, d); 
	return 0;
}
循环输入,分类统计
题目传送门:统计成绩
4.11 的倍数
参考代码:
#include <stdio.h>
#include <string.h>
int n;
int main() {
	int i, j;
	scanf("%d", &n); //n次输入
	while(n--) {
		char x[105]; //用字符串存储大数
		int s1 = 0, s2 = 0, len;
		scanf("%s", x);
	        len = strlen(x); //数的长度
		for(i = 0; i < len; i++) {
			if((i+1)%2) s1 += (x[i]-'0'); //奇数位,加在s1里,字符转数字x[i]-'0'
			else s2 += (x[i]-'0');	//偶数位,加在s2里
		}
		if(s1%11 == s2%11) printf("Yes\n"); //如果两个数取余11大小相同,说明是11的倍数,输出Yes
		else printf("No\n"); //否则不是11的倍数,输出No
	}
	return 0;
} 
根据题意模拟,注意字符串处理
题目传送门:11 的倍数