7-1 电子汪
分数 30
作者 陈越
单位 浙江大学
据说汪星人的智商能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。
本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。
输入格式:
输入在一行中给出两个 [1, 9] 区间内的正整数 A 和 B,用空格分隔。
输出格式:
在一行中输出 A + B 个Wang!。
输入样例:
2 1
输出样例:
Wang!Wang!Wang!
参考答案:
#include <stdio.h>
int main (void) {
int A, B;
scanf("%d %d", &A, &B);
for(int i = 0; i < A + B; i++){
printf("Wang!");
}
return 0;
}
7-2 进化论
分数 30
作者 陈越
单位 浙江大学

在“一年一度喜剧大赛”上有一部作品《进化论》,讲的是动物园两只猩猩进化的故事。猩猩吕严说自己已经进化了 9 年了,因为“三年又三年”。猩猩土豆指出“三年又三年是六年呐”……
本题给定两个数字,以及用这两个数字计算的结果,要求你根据结果判断,这是吕严算出来的,还是土豆算出来的。
输入格式:
输入第一行给出一个正整数 N,随后 N 行,每行给出三个正整数 A、B 和 C。其中 C 不超过 10000,其他三个数字都不超过 100。
输出格式:
对每一行给出的三个数,如果 C 是 A×B,就在一行中输出 Lv Yan;如果是 A+B,就在一行中输出 Tu Dou;如果都不是,就在一行中输出 zhe du shi sha ya!。
输入样例:
3
3 3 9
3 3 6
3 3 12
输出样例:
Lv Yan
Tu Dou
zhe du shi sha ya!
参考答案:
#include <stdio.h>
int main (void) {
int N; scanf("%d", &N);
while(N--){
int A, B, C;
scanf("%d %d %d", &A, &B, &C);
if(C == A * B){
printf("Lv Yan\n");
}else if(C == A + B){
printf("Tu Dou\n");
}else{
printf("zhe du shi sha ya!\n");
}
}
return 0;
}
7-3 单词长度
分数 20
作者 翁恺
单位 浙江大学
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
输入格式:
输入在一行中给出一行文本,以.结束
提示:用scanf("%c",...);来读入一个字符,直到读到.为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It's great to see you here.
输出样例:
4 5 2 3 3 4
参考答案:
#include <stdio.h>
int main (void) {
char ch;
int count = 0, flag = 0;
while((ch = getchar()) != EOF){
if(ch != ' ' && ch != '.'){
count++;
}else{
if(count > 0){
if(flag){
printf(" ");
}
printf("%d", count);
count = 0;
flag = 1;
}
}
}
return 0;
}
7-4 兰州牛肉面
分数 10
作者 陈越
单位 浙江大学

兰州牛肉面是历史悠久的美食,根据牛肉面的宽窄、配料的种类,可以细分为上百个不同的品种。你进到兰州的任何一家牛肉面馆,只说:“来一碗牛肉面!”就好像进到加州的咖啡馆说“来一杯咖啡”一样,会被店主人当成外星人……
本题的任务是,请你写程序帮助一家牛肉面馆的老板统计一下,他们一天卖出各种品种的牛肉面有多少碗,营业额一共有多少。
输入格式:
输入第一行给出一个正整数 N(≤100),为牛肉面的种类数量。这里为了简单起见,我们把不同种类的牛肉面从 1 到 N 编号,以后就用编号代替牛肉面品种的名称。第二行给出 N 个价格,第 i 个价格对应第 i 种牛肉面一碗的单价。这里的价格是 [0.01, 200.00] 区间内的实数,以元为单位,精确到分。
随后是一天内客人买面的记录,每条记录占一行,格式为:
品种编号 碗数
其中碗数保证是正整数。当对应的 品种编号 为 0 时,表示输入结束。这个记录不算在内。
输出格式:
首先输出 N 行,第 i 行输出第 i 种牛肉面卖出了多少碗。最后一行输出当天的总营业额,仍然是以元为单位,精确到分。题目保证总营业额不超过 106。
输入样例:
5
4.00 8.50 3.20 12.00 14.10
3 5
5 2
1 1
2 3
2 2
1 9
0 0
输出样例:
10
5
5
0
2
126.70
参考答案:
#include <stdio.h>
struct Noodles{
double price;
int count;
};
int main (void) {
int N;
scanf("%d", &N);
struct Noodles bow[N+5];
for(int i = 1; i <= N; i++){
scanf("%lf", &bow[i].price);
bow[i].count = 0;
}
int id, cnt;
while(scanf("%d %d", &id, &cnt) && id != 0){
bow[id].count += cnt;
}
double sum = 0;
for(int i = 1; i <= N; i++){
sum += bow[i].count * bow[i].price;
printf("%d\n", bow[i].count);
}
printf("%.2lf", sum);
return 0;
}
7-5 大整数加减法 三部曲之二:逐位相加并进位
分数 10
作者 丁展
单位 金陵科技学院
大整数加减法又被称为高精度整数加减法,该方法主要克服了计算机整数长度在硬件中的表示限制。大整数加减法通常使用字符串(或普通整数数组)表示整数。因为两个相加减的数长度可能不一致,所以大整数加减法的一种简单算法包括三个步骤:
-
高位补0对齐
-
字符串(或数组)逐位相加并进位
-
去除前导0
本题是三部曲的第二部:2. 逐位相加并进位
输入格式:
输入给出两行,每行包含一个不超过4000位的非负整数,两个非负整数长度一样。
输出格式:
输出两个整数相加的结果,如果有前导0需要保留。
输入样例1:
例如:
555555555555555
666666666666666
输出样例1:
输出:
1222222222222221
输入样例2:
0012345678901234567
0000000123456123456
输出样例2:
0012345802357358023
参考答案:
#include <stdio.h>
int main (void) {
char number1[10005], number2[10005], result[10005] = {0};
gets(number1); gets(number2);
int len = strlen(number1);
int carry = 0;
for(int i = len - 1; i >= 0; i--){
int A = number1[i] - '0';
int B = number2[i] - '0';
int sum = A + B + carry;
result[i+1] = (sum % 10) + '0';
carry = sum / 10;
}
if(carry != 0){
result[0] = '1';
printf("%s", result);
}else{
printf("%s", result+1);
}
return 0;
}
2659

被折叠的 条评论
为什么被折叠?



