解救最好的鸭鸭
本题主要考察利用循环对数进行拆解,利用取余和除10后的自动类型转换不断拆分要处理的数据,得到这个数字中3的个数。
#include <stdio.h>
int countDigit3(int number) {
int count = 0;
while (number > 0) {
if (number % 10 == 3) {
count++;
}
number /= 10;
}
return count;
}
int main() {
int m, n;
int totalCount = 0;
scanf("%d %d", &m, &n);
for (int i = m; i <= n; i++) {
totalCount += countDigit3(i);
}
printf("%d", totalCount);
return 0;
}
打工?社畜!
本题考察利用循环进行逻辑运算。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int n;
int count = 0;
scanf("%d", &n);
int m = 1;
int p = 1;
for (int i = 1; i <= n; i++) {
if (i < m || i == m) {
count += p;
}
else {
p += 1;
m = m + p;
count += p;
}
}
printf("%d", count);
return 0;
}
水题
本题考查利用switch结构进行输出,以及思维的转换,有的时候利用字符串读取和分解更加简单,效率更高。
#include<stdio.h>
int main() {
char arr[20];
int count = 0;
for (int i = 0; i < 20; i++) {
scanf("%c", &arr[i]);
if (arr[i] == '\n') {
break;
}
count++;
}
for (int i = 0; i < count; i++) {
switch (arr[i])
{
case '0':printf("zero "); break;
case '1':printf("one "); break;
case '2':printf("two "); break;
case '3':printf("three "); break;
case '4':printf("four "); break;
case '5':printf("five "); break;
case '6':printf("six "); break;
case '7':printf("seven "); break;
case '8':printf("eight "); break;
case '9':printf("nine "); break;
default:
break;
}
}
return 0;
}
落花流水
本题主要考察对于循环和判断的使用,根据不同的条件来判断得分的情况(比如设置cnt为计数器),主要分为单一得分和多项得分两种(其中我们可以发现荷花明确出现时不会得分,所以只考虑前三个条件即可);选择地点后再去进行河蟹得分的判断,根据不同的最终结果输出相对应的输出形式。
#include <stdio.h>
#include <string.h>
int main (void) {
int n;
int max_score = 0, best_location = 0, h = 0, kc = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
char l, m, p;
int w, r, s;
int score = 0, cnt = 0;//定义分数与计数器
scanf(" %c %d %c %c %d %d", &l, &w, &m, &p, &r, &s);//scanf前加个空格防止读取数据终止
if (!(l >= 'a' && l <= 'm' || l >= 'A' && l <= 'M')) {//没有柳絮才能进入判断
if (w == 1) {//有山峰河流
score += 10;
cnt += 2;
} else if (w > 1 && w <= 9) {//有河流
score += 8;
cnt++;
}
if (m == 'x' || m == 'X') {//有紫罗兰花
score += 15;
cnt++;
}
if (cnt == 1) {//判断是否只有一个环境因素
if (score == 8) {//只有河流
score = 6;
} else {//只有紫罗兰花
score = 10;
}
}
if (score >= 10 && score > max_score) {//判断该地点是否能野炊,是否分数最高且序列号最小
max_score = score;//记录最高分
best_location = i;//记录地点序号
h = r;//河蟹
kc = s;//烤肠
}
}
}
if (best_location == 0) {//若无适合野炊地点
printf("What @ plty!\n");
} else {//若有,根据河蟹与烤肠数量进行相对应的输出
if (h > kc) {
max_score -= (h - kc);
}
if (h <= kc) {
max_score += (2 * h - kc);
}
if (max_score < 0) {
max_score = (- max_score);
}
printf("%d %d\n", best_location, max_score);
if (max_score < 10) {//若处理完河蟹与烤肠得分小于十分则还要换行输出
printf("Man! what can l s4y?");
}
}
return 0;
}
你也会加减法吗?
该题主要考察switch语句与for循环语句的结合,在运算符为"/"、"q"以及其他运算符时会产生其他结果。
#include <stdio.h>
int main() {
int n, a, b;
char c;
scanf("%d", &n); // 读取算式个数
for (int i = 0; i < n; i++) {
scanf("%d %c %d", &a, &c, &b); // 读取每个算式的参数
switch (c) {
case '+':
printf("%d\n", a + b);
break;
case '-':
printf("%d\n", a - b);
break;
case '*':
printf("%d\n", a * b);
break;
case '/':
if (b == 0) {
printf("N0\n");
} else {
printf("%d\n", a / b);
}
break;
case 'q':
printf("I ju5t want to take a break, n0t quit!\n");
return 0; // 结束程序
default:
printf("This is an invalid operatiOn.\n");
break;
}
}
return 0;
}