R7-1 求数组中偶数之和
分数 30
作者 王立香
单位 山东理工大学
从键盘输入n个整数存入一维数组中,计算数组元素中所有偶数之和并输出。
输入格式:
第一行,输入整数个数n;
第二行,n 个整数,数据之间用空格隔开。
输出格式:
输出和,最后换行。
输入样例:
8
10 19 18 16 17 15 14 13
输出样例:
58
参考答案:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int num[n];
int sum = 0;
for(int i = 0 ; i < n ; i++){
scanf("%d",&num[i]);
if(num[i] % 2 == 0){
sum += num[i];
}
}
printf("%d",sum);
}
R7-2 求一组数平均数。
分数 30
作者 赵静静
单位 浙江工贸职业技术学院
实现求一组正数平均数的功能,这一组数个数不定,由用户输入控制,当输入为-1时,输入结束,-1不计入。
输入格式:
请在这里写输入格式。例如:输入在一行中给出n 个数 ,-1表示输入结束。
输出格式:
请在这里描述输出格式。例如:对每一组输入,在一行中输出平均值,保留2位小数。
输入样例:
在这里给出一组输入。例如:
3 6 9 21 -1
输出样例:
在这里给出相应的输出。例如:
avg = 9.75
参考答案:
#include <stdio.h>
int main (void) {
double number, count = 0, sum = 0;
while(scanf("%lf", &number)){
if(number == -1){
if(count == 0){
printf("avg = 0.00");
}else{
double avg = sum / count;
printf("avg = %.2lf", avg);
}
break;
}else{
sum += number;
count ++;
}
}
return 0;
}
R7-3 计算军事训练成绩平均分
分数 30
作者 袁恩
单位 中国人民解放军陆军工程大学
连队测试完体能,输入士兵体能成绩,体能成绩为整数,读入0则结束,如果读入的成绩低于0或者超过100则过滤该成绩,计算这些数中正整数的平均值,保留两位小数。
输入格式:
输入若干整数,以空格隔开。
输出格式:
输出平均值,保留两位小数。
输入样例:
100 90 85 120 -20 30 0
输出样例:
76.25
参考答案:
#include <stdio.h>
int main (void) {
int score, count = 0;
double avg = 0;
while(scanf("%d", &score)){
if(score == 0){
if(count == 0){
printf("0.00");
}else{
avg = avg / count;
printf("%.2lf", avg);
}
break;
}else if(score > 0 && score <= 100){
avg += score;
count ++;
}
}
return 0;
}
R7-4 求N分之一序列前N项和
分数 30
作者 C课程组
单位 浙江大学
本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
6
输出样例:
sum = 2.450000
参考答案:
#include <stdio.h>
int main (void) {
int n;
scanf("%d", &n);
double sum = 0;
for(int i = 1; i <= n; i++){
sum += 1.0 / i;
}
printf("sum = %.6lf", sum);
return 0;
}
R7-5 求简单交错序列前N项和
分数 30
作者 C课程组
单位 浙江大学
本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。
输入样例:
10
输出样例:
sum = 0.819
参考答案:
#include <stdio.h>
int main (void) {
int n, flag = 1, number = 1;
scanf("%d", &n);
double sum = 0;
for(int i = 1; i <= n; i++){
sum += 1.0 / number * flag;
flag = - flag;
number += 3;
}
printf("sum = %.3lf", sum);
return 0;
}
R7-6 求交错序列前N项和
分数 30
作者 陈建海
单位 浙江大学
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,结果保留三位小数。
输入样例:
5
输出样例:
0.917
参考答案:
#include <stdio.h>
int main (void) {
int n, flag = 1, number = 1;
scanf("%d", &n);
double sum = 0;
for(int i = 1; i <= n; i++){
sum += i * 1.0 / number * flag;
flag = -flag;
number += 2;
}
printf("%.3lf", sum);
return 0;
}
R7-7 水仙花数
分数 20
作者 徐镜春
单位 浙江大学
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
参考答案:
#include <stdio.h>
#include <math.h>
int main (void) {
int n;
scanf("%d", &n);
int begin = pow(10, n-1), end = pow(10, n);
for(int i = begin; i < end; i++){
int sum = 0, temp = i;
while(temp != 0){
int number = temp % 10;
sum += pow(number, n);
temp /= 10;
}
if(sum == i){
printf("%d\n", i);
}
}
return 0;
}
R7-8 计算天数
分数 20
作者 沈睿
单位 浙江大学
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62
参考答案:
#include <stdio.h>
int main (void) {
int year, month, day;
int month_count[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
scanf("%04d/%02d/%02d", &year, &month, &day);
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
month_count[1] = 29;
}
for(int i = 0; i < month-1; i++){
day += month_count[i];
}
printf("%d", day);
return 0;
}
R7-9 矩阵运算
分数 20
作者 C课程组
单位 浙江大学
给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
输入格式:
输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。
输入样例:
4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1
输出样例:
35
参考答案:
#include <stdio.h>
int main (void) {
int n, matrix[15][15], sum = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
scanf("%d", &matrix[i][j]);
sum += matrix[i][j];
}
}
/*
sum: 所有元素之和
sum1:副对角线之和
sum2:最后一行之和
sum3:最后一列之和
*/
int sum1, sum2, sum3, index;
(sum1 = sum2 = sum3 = 0), (index = n-1);
for(int i = 0; i < n; i++){
sum1 += matrix[i][index];
index--;
}
for(int i = 0; i < n; i++){
sum2 += matrix[n-1][i];
}
for(int i = 0; i < n; i++){
sum3 += matrix[i][n-1];
}
int answer = sum - sum1 - sum2 - sum3 + matrix[0][n-1] + matrix[n-1][0] + matrix[n-1][n-1];
printf("%d", answer);
return 0;
}
R7-10 输出GPLT
分数 10
作者 陈越
单位 浙江大学
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
参考答案:
#include <stdio.h>
int main (void) {
char str[100000];
gets(str);
int G, P, L, T, len = strlen(str);
G = P = L = T = 0;
for(int i = 0; i < len; i++){
if(str[i] == 'G' || str[i] == 'g'){
G++;
}else if(str[i] == 'P' || str[i] == 'p'){
P++;
}else if(str[i] == 'L' || str[i] == 'l'){
L++;
}else if(str[i] == 'T' || str[i] == 't'){
T++;
}
}
while(G != 0 || P != 0 || L != 0 || T != 0){
if(G != 0){
printf("G");
G--;
}
if(P != 0){
printf("P");
P--;
}
if(L != 0){
printf("L");
L--;
}
if(T != 0){
printf("T");
T--;
}
}
return 0;
}
R7-11 组个最小数
分数 10
作者 曹鹏
单位 Google
给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入格式:
输入在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
输出格式:
在一行中输出能够组成的最小的数。
输入样例:
2 2 0 0 0 3 0 0 1 0
输出样例:
10015558
参考答案:
#include <stdio.h>
int main (void) {
int count[10] = {0};
for(int i = 0; i < 10; i++){
scanf("%d", &count[i]);
}
for(int i = 1; i < 10; i++){
if(count[i] != 0){
printf("%d", i);
count[i]--;
break;
}
}
for(int i = 0; i < 10; i++){
while(count[i] != 0){
printf("%d", i);
count[i]--;
}
}
return 0;
}
R7-12 最长对称子串
分数 10
作者 陈越
单位 浙江大学
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
参考答案:
#include <stdio.h>
int main (void) {
char str[1005];
gets(str);
int max_count = 1, len = strlen(str);
for(int i = 0; i < len; i++){
for(int j = len-1; j >= i; j--){
if(str[i] == str[j]){
int left = i, right = j;
while(left < right){
if(str[left] == str[right]){
left++;
right--;
}else{
break;
}
}
if(left >= right){
max_count = max_count > (j - i + 1) ? max_count:(j - i + 1);
}
}
}
}
printf("%d", max_count);
return 0;
}
R7-13 九宫格输入法
分数 10
作者 周强
单位 青岛大学
假设有九宫格输入法键盘布局如下:
[ 1,.?! ] [ 2ABC ] [ 3DEF ]
[ 4GHI ] [ 5JKL ] [ 6MNO ]
[ 7PQRS ] [ 8TUV ] [ 9WXYZ ]
[ 0空 ]
注意:中括号[ ]仅为了表示键盘的分隔,不是输入字符。每个中括号中,位于首位的数字字符即是键盘的按键,按一下即可输入该数字字符。多次按同一个键,则输入的字符依次循环轮流,例如按两次3,则输入D;按5次7,则输入S;按6次2,则输入A。按键0的输入组合是0和空格字符,即按两次0输入空格。
你需要对于给定的按键组合,给出该组合对应的文本。
输入格式:
输入在一行中给出数个字符的按键组合(例如 999 表示按3次9),每个字符的按键组合之间用空格间隔,最后一个输入法组合之后以换行结束。输入数据至少包括一个字符的按键组合,且输入总长度不超过500个字符。
输出格式:
在一行中输出该按键组合对应的文本。
输入样例:
22 5555 22 666 00 88 888 7777 4444 666 44
输出样例:
ALAN TURING
参考答案:
#include <stdio.h>
int main (void) {
char keyboard[10][6] = {
"0 ",
"1,.?!", "2ABC", "3DEF",
"4GHI", "5JKL", "6MNO",
"7PQRS", "8TUV", "9WXYZ",
};
char input[505];
while(scanf("%s", input) != EOF){
int count = strlen(input) - 1, x = input[0] - '0';
if(x == 1 || x == 7 || x == 9){
count %= 5;
}else if(x == 2 || x == 3 || x == 4 || x == 5 || x == 6 || x == 8){
count %= 4;
}else if(x == 0){
count %= 2;
}
printf("%c", keyboard[x][count]);
}
return 0;
}
// 2025/11/23 01:18 GuoQiZhan
2890

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



