2019-10-31 10月31日程序设计实验OJ题目记录
Problem A: 输出连续的整数序列 之一
Description
输出指定区间内的所有整数。
Input
输入只有1行,即N,N是一个int类型的数据。
Output
如果N>0,则输出[1,N]区间内的所有整数;如果N =0,则输出0;如果N<0,则输出[N,-1]内的所有整数。
如果输出的整数多于1个,则两两之间用一个空格隔开。
Sample Input
9
Sample Output
1 2 3 4 5 6 7 8 9
AC代码
#include<stdio.h>
int main() {
int n;
int flag = 0;
scanf("%d", &n);
if (n == 0) {
printf("%d", 0);
} else if (n > 0) {
for (int i = 1; i <= n; i++) {
if (flag == 0) {
printf("%d", i);
flag = 1;
} else {
printf(" %d", i);
}
}
} else if (n < 0) {
for (int i = n; i <= -1; i++) {
if (flag == 0) {
printf("%d", i);
flag = 1;
} else {
printf(" %d", i);
}
}
}
return 0;
}
Problem B: 输出连续的整数序列 之二
Description
输出若干个连续的整数序列。
Input
输入有多行。第一行是N>0,表示后面有N行输入。
之后每行输入包含2个数据P和Q,两者之间用空格隔开,且均在int类型的表示范围内。
Output
输出N个连续的整数序列,序列两两之间用一个空行隔开。
其中第i个序列是在P和Q之间的整数,包括P和Q,且当输出的数据多于1个时,两两之间用一个空格隔开。
Sample Input
3
1 100
10 -10
10 10
Sample Output
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
10
HINT
当P或Q是int类型的能够表示的最大值或者最小值时,应该如何处理?
AC代码
#include <stdio.h>
int main() {
int z, x, i, N, temp, j;
scanf("%d", &N);
for(j = 0; j < N; ++j) {
scanf("%d%d",&z,&x);
if(z > x) {
temp=z;
z=x;
x=temp;
}
for(i=z; i<x; ++i) {
printf("%d ", i);
}
printf("%d\n", x);
printf("\n");
}
return 0;
}
Problem C: 是元音字母吗?
Description
输入一个英文字母,判断是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,U
Input
输入一个英文字母
Output
是元音字母,输出“yes”,否则输出“no”,行尾没有回车。
Sample Input
A
Sample Output
yes
AC代码(不要吐槽格式)
#include<stdio.h>
int main() {
char c;
scanf("%c", &c);
switch(c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
printf("yes");
break;
default:
printf("no");
break;
}
return 0;
}
Problem D: 序数的后缀
Description
英文中经常用阿拉伯数字加上字母后缀表示“第几“这样的序数词。比如,”第10次会面“通常写成”10th meeting“。
后缀来源于英文的序数词:第1的英文是first,写成”1st‘;第2的英文是second,写成“2nd”;第3的英文是third,写成“3rd”,第4是fourth,写成“4th”,以后的数字都加“th”。
在这里规定,所有后缀为1的数字都写成“st”结尾,后缀为2的数字写成“nd”结尾,后缀为3的英文写成“rd”结尾,其他的写成“th”结尾。
Input
输入为多个很小的正整数,当输入为0时表示输入结束。
Output
输出为多行,每行对应一个输入数字的序数表示。
Sample Input
1 2 3 4 5 10 11 12 13 14 0
Sample Output
1st
2nd
3rd
4th
5th
10th
11st
12nd
13rd
14th
HINT
用switch语句似乎更容易些。
AC代码
然而并没有用switch。
#include <stdio.h>
int main() {
int m, n;
while (1) {
scanf("%d", &n);
if (n == 0) {
break;
}
if (n <= 10) {
if (n == 1) {
printf("%dst\n", n);
} else if (n == 2) {
printf("%dnd\n", n);
} else if (n == 3) {
printf("%drd\n", n);
} else {
printf("%dth\n", n);
}
} else {
m = n % 10;
if (m == 1) {
printf("%dst\n", n);
} else if (m == 2) {
printf("%dnd\n", n);
} else if (m == 3) {
printf("%drd\n", n);
} else {
printf("%dth\n", n);
}
}
}
}
Problem E: 简单的数值统计
Description
现有一堆非零整数,要求统计其中正数、负数的个数以及它们的平均值。
Input
输入一系列整数,仅有最后一个数字是0,表示输入的结束。所有数据以及它们的和都在int的表示范围之内。
Output
输出有2行。如果有负数,第一行输出负数的个数和平均值,否则第一行输出0;如果有正数,第二行输出正数的个数以及平均值,否则第二行输出0。每行输出如果有2个数,则用空格隔开。平均值只保留2位小数。
Sample Input
1 2 3 4 -1 -2 -3 -4 0
Sample Output
4 -2.50
4 2.50
AC代码
#include <stdio.h>
int main() {
int number;
int countPositive=0,countNegative=0;
int sumPositive=0,sumNegative=0;
float avgPositive,avgNegative;
scanf("%d",&number);
while(number != 0) {
if(number < 0) {
sumPositive += number;
countPositive++;
}
else {
sumNegative += number;
countNegative++;
}
scanf("%d",&number);
}
avgPositive = (sumPositive * 1.0) / countPositive;
avgNegative = (sumNegative*1.0) / countNegative;
if(countPositive != 0)
printf("%d %.2f\n", countPositive, avgPositive);
else
printf("%d\n", countPositive);
if(countNegative != 0)
printf("%d %.2f\n", countNegative, avgNegative);
else
printf("%d\n", countNegative);
return 0;
}
Problem F: 求累加和
Description
编程求min~max的累加和(含min和max),其中max>=min>0。
Input
输入为多行。第一行是一个整数N>0,表示后面有N个测试用例。后面有N行,每行包含2个整数,分别是min和max。
Output
输出为N行,每个测试用例的计算结果占据一行。每行的格式为:
case i:sum=s.
其中i表示测试用例的编号(从1开始),s是该测试用例对应的累加和(设不超过int的表示范围)。
Sample Input
2
1 10
1 100
Sample Output
case 1:sum=55.
case 2:sum=5050.
AC代码
#include<stdio.h>
int main() {
int N, i, j, sum, a, b;
scanf("%d", &N);
for(i = 0; i < N; ++i) {
scanf("%d%d", &a, &b);
sum = 0;
for(j = a; j <= b; ++j) {
sum += j;
}
printf("case %d:sum=%d.\n", i + 1, sum);
}
return 0;
}