scanf("%d",&a);
if(a%4==0&&a%100!
=0)
printf("Yes\n");
elseif(a%400==0)
printf("Yes\n");
else
printf("No\n");
return0;
}
(1-11)
Description
GHacker最近痴迷于一个新上市的解谜游戏,其中一关的过关是破解一个字符串S。
经过3天的冥思苦想,GHacker成功的搞明白了这其中的奥秘,把串S中的整数取出来求和,就可以过关了。
但是GHacker的数学实在糟糕。
他无法在短暂的时间内算出来,只好求助Jackie。
Jackie观察到虽然每次出现的数字不同,但是其它的符号并不会变化。
于是Jackie编写了一个非常短的程序,帮助GHacker把这一关过了。
Input
输入为串S,只有一行。
Output
串S中用非数字(0~9)分隔开的非负整数之和,不会超出int类型的数据范围。
SampleInput
`13?
:
[7514],54.487=="(x159?
?
392)%032\n111cdef120$95;
SampleOutput
HINT
scanf()可以解决这个问题,注意转义字符和格式控制字符。
#include
intmain()
{
inta,b,c,d,e,f,g,h,i,j,k,s;
scanf("%*c%d%*c%*c%*c%d%*c%*c%d%*c%d%*c%*c%*c%*c%d%*c%d%*c%*c%d%*c%*c%d%*c%*c%d%*c%*c%*c%*c%d%*c%d%*c",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j,&k);
s=a+b+c+d+e+f+g+h+i+j+k;
printf("%d",s);
return0;
}
(1-12)
ProblemL:
水仙花数
TimeLimit:
1SecMemoryLimit:
2MB
Submit:
960Solved:
534
[Submit][Status][WebBoard]
Description
如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。
如:
13+53+33=153。
Input
一个整数x,100<=x<=999。
Output
x是水仙花数,则输出“YES”,否则为“NO”。
SampleInput
153
SampleOutput
YES
答案:
#include
intmain()
{
inta,b,c,d,e;
scanf("%d",&a);
b=a/100;
c=(a-b*100)/10;
d=(a-b*100-c*10);
e=b*b*b+c*c*c+d*d*d;
if(a==e)
printf("YES\n");
else
printf("NO\n");
return0;
}
(1-13)
ProblemM:
求1+2+...+n=?
TimeLimit:
1SecMemoryLimit:
2MB
Submit:
2023Solved:
413
[Submit][Status][WebBoard]
Description
给定一个n,求出s=1+2+3+...+n的值。
Input
输入只有一行,包含一个正整数n(n<=232)。
Output
输出一行,为1+2+...+n的值。
SampleInput
10
SampleOutput
55
HINT
n的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。
#include
intmain()
{
unsignedlonglongn;
scanf("%llu",&n);
if(n%2==0)
printf("%llu",n/2*(n+1));
else
printf("%llu",(n+1)/2*n);
return0;
}
(1-14)
ProblemN:
2的多少次幂
TimeLimit:
1SecMemoryLimit:
2MB
Submit:
1022Solved:
470
[Submit][Status][WebBoard]
Description
从键盘输入一个数x,x是2的整数次幂(x=2y),请编程求出y的值。
Input
一个非负有理数x,x在[0,2256]范围内。
Output
一个整数y。
SampleInput
1
SampleOutput
0
HINT
看起来数据很大,但是用double完全可以存储。
为什么?
请研究下IEEE-754标准的浮点数存储格式。
这里要用到C语言标准库的数学函数。
#include
#include
intmain()
{
doublex;
inty;
scanf("%lf",&x);
y=log2(x);
printf("%d",y);
return0;
}
第二次作业
(2_1)问题A:
哪一行比较长
时间限制:
1Sec内存限制:
2MB
提交:
625解决:
252
[提交][状态][讨论版]
题目描述
读取两行字符串,按每行的长度从长到短输出。
输入
输入为两行,每行不会超过26个字符。
输出
输出为两行,按每行的长度从长到短输出。
样例输入
abcdefghijk
abcdefghijklmnopqrstuvwxyz
样例输出
abcdefghijklmnopqrstuvwxyz
abcdefghijk
提示
了解字符串的存储和操作,了解gets()和scanf("%s")读入字符串的不同之处
#include
#include
intmain()
{
chars1[27],s2[27];
inta,b;
gets(s1);
gets(s2);
a=strlen(s1);
b=strlen(s2);
if(a>=b)
{
puts(s1);
puts(s2);
}
else
{
puts(s2);
puts(s1);
}
return0;
}
(2_2)>题目描述
从键盘上输入0~100之间的三个数,按从小到大的顺序输出。
输入
输入只有一行,为三个整数。
输出
按从小到大输出这三个数。
样例输入
151020
样例输出
101520
提示
用if语句判断各种情况可以解决这个问题。
#include
intmain()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>=b&&b>=c)
printf("%d%d%d\n",c,b,a);
elseif(a>=c&&c>=b)
printf("%d%d%d\n",b,c,a);
elseif(b>=c&&c>=a)
printf("%d%d%d\n",a,c,b);
elseif(b>=a&&a>=c)
printf("%d%d%d\n",c,a,b);
elseif(c>=b&&b>=a)
printf("%d%d%d\n",a,b,c);
else
printf("%d%d%d\n",b,a,c);
return0;
}
AppendCode
(2_3)题目描述
输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n输入
输入三个整数,依次为k、m、n。
输出
从小到大输出符合题意的所有整数,两数之间用一个空格分开。
样例输入
1523
样例输出
23489101415
提示
难点在于输出格式的控制:
空格在数的中间,学会用循环时边界情况的特殊处理。
#include
intmain()
{
intk,m,n,a,b,i,c,d;
scanf("%d%d%d",&k,&m,&n);
if(m>n)
c=m,d=n;
else
c=n,d=m;
printf("%d",d);
for(i=d+1;i<=k;i++)
{a=i%m;
b=i%n;
if(a==0&&b!
=0||a!
=0&&b==0)
printf("%d",i);
}
printf("\n");
return0;
}
(2_4)Description
计算a+b,0<=a,b<1000。
Input
输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。
Output
每行输出一个a+b的值,顺序与输入对应。
SampleInput
12
1020
SampleOutput
3
30
HINT
OJ系统上测试输入结束符为EOF(EndOfFile),其值为-1。
用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。
本题解法参看FAQ。
#include
intmain()
{
inta,b;
while(scanf("%d%d",&a,&b)!
=EOF)
printf("%d\n",a+b);
return0;
}
AppendCode
(2_5)问题E:
A+BProblem(II):
Input/OutputPratice
时间限制:
1Sec内存限制:
2MB
提交:
242解决:
177
[提交][状态][讨论版]
题目描述
计算a+b,0<=a,b<1000。
输入
输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。
输出
每行输出一个a+b的和,顺序与输入对应。
样例输入
2
12
1020
样例输出
3
30
提示
#include
intmain()
{
inta[1000],b[1000],N,i;
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d%d",&a[i],&b[i]);
for(i=1;i<=N;i++)
printf("%d\n",a[i]+b[i]);
return0;
}
N给出了测试样例数,用for循环处理方便。
(2_6)问题F:
A+BProblem(III):
Input/OutputPratice
时间限制:
1Sec内存限制:
2MB
提交:
250解决:
154
[提交][状态][讨论版]
题目描述
计算a+b,0<=a,b<1000。
输入
输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。
当测试样为00时表示输入结束,00不参与运算。
输出
每行输出一个a+b的值,顺序与输入对应。
样例输入
12
1020
00
样例输出
3
30
提示
练习break的使用。
#include
intmain()
{
inta,b,sum;
while(scanf("%d%d",&a,&b)!
=EOF)
{
if(a==0&&b==0)break;
else
{
sum=a+b;
printf("%d\n",sum);
}
}
return0;
}
(2_7)问题G:
A+BProblem(IV)