02-2. 然后是几点(15)
有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。 读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。
输入格式:
输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。
输出格式:
输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
#include
int main(int argc, const char * argv[])
{
int time,add,hour,minute,hour1, minute1,a,b;
scanf("%d %d",&time,&add);
hour=time/100;
minute=time%100;
minute1=hour*60+minute+add;
hour1=minute1/60;
b=minute1%60;
a=hour1*100+b;
printf("%d",a);
}
03-1. 三天打鱼两天晒网(15)
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
输入格式:
输入在一行中给出1个不超过1000的正整数N。
输出格式:
在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。
输入样例1:
103
输出样例1:
Fishing in day 103
输入样例2:
34
输出样例2:
Drying in day 34
#include
int main()
{
int n;
scanf("%d", &n);
int t = n%5;
if (t>=1 && t<=3){
printf("Fishing in day %d\n", n);
} else{
printf("Drying in day %d\n", n);
}
return 0;
}
03-3. 12-24小时制(15)
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
输入格式:
输入在一行中给出带有中间的“:”符号(半角的冒号)的24小时制的时间,如
12:34
表示12点34分。当小时或分钟数小于10时,均没有前导的零,如
5:6
表示5点零6分。
提示:在scanf的格式字符串中加入“:”,让scanf来处理这个冒号。
输出格式:
在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串“AM”或表示下午的字符串“PM”。如“
5:6 PM
”表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的
12:00
就是12小时制的
12:0 PM
;而0点被认为是第二天的时间,所以是
0:0 AM
。
输入样例:
21:11
输出样例:
9:11 PM
#include
int main(int argc, const char * argv[])
{
int m,n;
scanf("%d:%d",&m,&n);
if (m>=0 && m<12) {
printf("%d:%d AM\n",m,n);
}
else if (m==12){
printf("%d:%d PM\n",m,n);
}
else if (m>12 && m<=24){
printf("%d:%d PM\n",m%12,n);
}
}
03-4. 成绩转换(15)
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在一行中给出1个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
输入样例:
90
输出样例:
A
#include
int main()
{
int score;
scanf("%d",&score);
score /= 10;
switch (score){
case 10:
case 9:
printf(“A”);
break;
case 8:
printf(“B”);
break;
case 7:
printf(“C”);
break;
case 6:
printf(“D”);
break;
default:
printf(“E”);
}
return 0;
}
04-0. 求符合给定条件的整数集(15)
给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
输入格式:
输入在一行中给出A。
输出格式:
输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
输入样例:
2
输出样例:
234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543
#include
int main ()
{
int n;
scanf("%d", &n);
int i, j, k;
int count = 0;
for (i=n; i<=n+3; i++) {
for (j=n; j<=n+3; j++) {
if ( j == i ) continue;
for (k=n; k<=n+3; k++) {
if ( k==i || k==j) continue;
printf("%d%d%d", i, j, k);
count ++;
if (count % 6 == 0) {
printf("\n");
} else {
printf(" ");
}
}
}
}
return 0;
}
04-1. 水仙花数(20)
水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例 如:153 = 13 + 53+ 33。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3<=N<=7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
#include
int main(int argc, const char * argv[])
{ int n,i,first;
scanf("%d",&n);
i=1;first=1;
while(i
i++;
}
i=first;
while(i0);
if(sum==i){
printf("%d\n",i);
}
i++;
}
return 0;
}
04-2. 打印九九口诀表(15)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
徐镜春(浙江大学)
下面是一个完整的下三角九九口诀表:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
16=6 26=12 36=18 46=24 56=30 66=36
17=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81
本题要求对任意给定的1位正整数N,输出从11到N*N的部分口诀表。
输入格式:
输入在一行中给出一个正整数N(1<=N<=9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
输入样例:
4
输出样例:
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
#include
int main(int argc, const char * argv[])
{ int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++){
printf("%d*%d=%-4d",j,i,i*j);
if(i==j)
printf("\n");
}
}
return 0;
}
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出2个正整数M和N(1<=M<=N<=500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
#include
int main(int argc, const char * argv[])
{ int n,m,i,j;
int sum=0,cut=0;
scanf("%d %d",&m,&n);
if(m==1){
m=2;
}
for(i=m;i<=n;i++){
for(j=2;j<=i;j++)
{
if(i%j==0) break;
}if(j==i){
sum+=i;
cut++;
}
}
printf("%d %d",cut,sum);
return 0;
}
猜数字游戏(15)
猜数字游戏是令系统随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
输入格式:
输入第一行中给出2个不超过100的正整数,分别是系统产生的随机数、以及猜测的最大次数N。随后每行给出一个用户的输入,直到出现负数为止。
输出格式:
在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
输入样例:
58 4
70
50
56
58
60
-2
输出样例:
Too big
Too small
Too small
Good Guess!
#include
int main()
{
int rand_number, n;
scanf("%d %d", &rand_number, &n);
int i;
int m;
int flag = 0;
for (i = 1; i <= n; i++)
{
scanf("%d", &m);
if (m < 0)
break;
if (m > rand_number)
printf(“Too big\n”);
if (m < rand_number)
printf(“Too small\n”);
if (m == rand_number)
{
if (i == 1)
{
flag = 1;
printf(“Bingo!\n”);
break;
}
if (i == 2 || i == 3)
{
flag = 1;
printf(“Lucky You!\n”);
break;
}
if (i > 3)
{
flag = 1;
printf(“Good Guess!\n”);
break;
}
}
}
if (flag == 0)
printf(“Game Over\n”);
return 0;
}
求序列前N项和(15)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后2位。题目保证计算结果不超过双精度范围。
输入样例:
20
输出样例:
32.66
#include
int main()
{
int n;
double dividend,divisor;
double sum=0;
int i;
double t;
scanf("%d",&n);
//n=20000;
dividend=2;
divisor=1;
for (i=1;i<=n; i++) {
sum+=dividend/divisor;
t=dividend;
dividend=dividend+divisor;
divisor=t;
}
printf("%.2f\n",sum);
return 0;
}
约分最简分式(15)
分数可以表示为“分子/分母”的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。
输入格式:
输入在一行中给出一个分数,分子和分母中间以斜杠“/”分隔,如:
12/34
表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。
提示:在scanf的格式字符串中加入“/”,让scanf来处理这个斜杠。
输出格式:
在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用“分子/分母”的形式表示分数。如
5/6
表示6分之5。
输入样例:
60/120
输出样例:
1/2
#include
int main(int argc, const char * argv[])
{
int a,b;
int t;
scanf("%d/%d",&a,&b);
int c=a,d=b;
while(d!=0){
t=c%d;
c=d;
d=t;
}
printf("%d/%d\n" ,a/c,b/c);
return 0;
}
念数字(15)
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出“fu”字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:
输入在一行中给出一个整数,如:
1234
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si
输入样例:
-600
输出样例:
fu liu ling ling
#include
int main(int argc, const char * argv[])
{
int x;
scanf("%d",&x);
if(x<0){
printf("fu ");
x=-x;
}
int mask=1;
int t=x;
while(t>9){
t/=10;
mask*=10;
}
do{
int d=x/mask;
switch(d){
case 0:printf(“ling”);break;
case 1:printf(“yi”);break;
case 2:printf(“er”);break;
case 3:printf(“san”);break;
case 4:printf(“si”);break;
case 5:printf(“wu”);break;
case 6:printf(“liu”);break;
case 7:printf(“qi”);break;
case 8:printf(“ba”);break;
case 9:printf(“jiu”);break;
}
if(mask>9) printf(" ");
x%=mask;
mask/=10;
}while(mask>0);
printf("\n");
return 0;
}
求a的连续和(15)
输入两个整数a和n,a的范围是[0,9],n的范围是[1,8],求数列之和S = a+aa+aaa+…+aaa…a(n个a)。 如a为2、n为8时输出的是2+22+222+…+22222222的和。
输入格式:
输入在一行中给出两个整数,先后表示a和n。
输出格式:
在一行中输出要求的数列之和。
输入样例:
2 4
输出样例:
2468
#include
int main(int argc, const char * argv[])
{
int a,n;
int i,t=0,sum=0;
scanf("%d %d",&a,&n);
for(i=0;i
sum+=t;
}
printf("%d",sum);
return 0;
}
混合类型数据格式化输入(5)
本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。
输入格式:
输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。
输出格式:
在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。
输入样例:
2.12 88 c 4.7
输出样例:
c 88 2.12 4.70
#include
int main(int argc, const char * argv[])
{
double a;
int b;
char c;
double d;
scanf("%lf %d %c %lf",&a,&b,&c,&d);
printf("%c %d %.2lf %.2lf",c,b,a,d);
return 0;
}
简单计算器(20)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。
输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
输入样例:
1+2*10-10/2=
输出样例:
10
#include
int main(int argc, const char * argv[])
{
char ch=‘0’;
int result,i,flag = 0;
scanf("%d",&result);
while(ch!=’=’){
scanf("%c",&ch);
if(ch==’=’)
break;
scanf("%d",&i);
if(ch == ‘+’)
result +=i;
else if(ch == ‘-’)
result-=i;
else if(ch==’’)
result=i;
else if(ch==’/’)
{
if(i!=0)
result/=i;
else
flag =1;
}
else
flag=1;
}
if(flag)
printf(“error\n”);
else
printf("%d",result);
return 0;
}
#include
int main(int argc, const char * argv[])
{
int a,b;
char c;
scanf("%d",&a);
while(scanf("%c",&c)){
switch(c){
case '+':{scanf("%d",&b);a+=b;break;}
case '-':{scanf("%d",&b);a-=b;break;}
case '*':{scanf("%d",&b);a*=b;break;}
case '/':{scanf("%d",&b);
if(b==0){
printf("ERROR\n");
return 0;
} else{
a/=b;break;
}
}
case '=':{printf("%d\n",a);return 0;}
default:{
printf("ERROR\n");return 0;
}
}
}
return 0;
}
字符串字母大小写转换(10)
输入一个以#结束的字符串,本题要求将小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其它字符不变。
输入格式:
输入在一行中给出一个长度不超过40的、以#结束的非空字符串。
输出格式:
在一行中按照要求输出转换后的字符串。
输入样例:
Hello World! 123#
输出样例:
hELLO wORLD! 123
#include
int main(int argc, const char * argv[])
{
char c;
c = getchar();
while(c!=’#’)
{
if(c>=‘a’&& c<=‘z’)
{
c-=32;}
else if(c>=‘A’&&c<=‘Z’)
{
c+=32;
}
printf("%c",c);
c = getchar();
}
return 0;
}
单词长度(15)
你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it’s”算一个单词,长度为4。注意,行中可能出现连续的空格;最后的‘.’不计算在内。
输入格式:
输入在一行中给出一行文本,以‘.’结束。
提示:用scanf("%c",…);来读入一个字符,直到读到‘.’为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It’s great to see you here.
输出样例:
4 5 2 3 3 4
#include
int main(int argc, const char * argv[])
{
char s[100];
int i = 0;
do {
scanf("%c",&s[i]);
i++;
}while(s[i-1]!=’.’);
int j;
int cnt=0;
int k=0;
for(j=0;j {
if(s[j] !=’ ‘)
{
cnt++;
if(k!=0&&s[j]!=’.’)
{
printf(" “);
k = 0;
}
if(s[j]==’.’&&s[j-1]!=’ '&&cnt!=1)
{
printf(”%d",cnt-1);
}
}
else if(cnt !=0){
printf("%d",cnt);
cnt = 0;
k=1;
}
}
return 0;
}