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; }