山东科技大学OJ集锦.docx

上传人:b****7 文档编号:10190846 上传时间:2023-02-09 格式:DOCX 页数:86 大小:39.48KB
下载 相关 举报
山东科技大学OJ集锦.docx_第1页
第1页 / 共86页
山东科技大学OJ集锦.docx_第2页
第2页 / 共86页
山东科技大学OJ集锦.docx_第3页
第3页 / 共86页
山东科技大学OJ集锦.docx_第4页
第4页 / 共86页
山东科技大学OJ集锦.docx_第5页
第5页 / 共86页
点击查看更多>>
下载资源
资源描述

山东科技大学OJ集锦.docx

《山东科技大学OJ集锦.docx》由会员分享,可在线阅读,更多相关《山东科技大学OJ集锦.docx(86页珍藏版)》请在冰豆网上搜索。

山东科技大学OJ集锦.docx

山东科技大学OJ集锦

(1-2)

Description

计算两整数x和y(0

Input

输入只有一行,格式见sample。

Output

输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sample

SampleInput

x=11,y=3

SampleOutput

x+y:

14

x-y:

8

x*y:

33

x/yquotient:

3,remainder:

2

x^2:

121

y^3:

27

HINT

注意输入输出格式。

了解C语言整数除法运算符的特点,并且没有求幂的运算符

#include

intmain()

{

intx,y;

0

scanf("x=%d,y=%d",&x,&y);

printf("x+y:

%d\n",x+y);

printf("x-y:

%d\n",x-y);

printf("x*y:

%d\n",x*y);

printf("x/yquotient:

%d,remainder:

%d\n",x/y,x%y);

printf("x^2:

%d\n",x*x);

printf("y^3:

%d\n",y*y*y);

return0;

}

(1-3)

Description

从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。

Input

输入一个浮点型数据,有效数字不会超过十进制的6位。

Output

输出为两行。

第一行为圆的面积,第二行为圆的周长,格式见sample。

SampleInput

3

SampleOutput

Area:

28.

Perimeter:

18.

HINT

了解浮点类型的输入、输出和算术运算符

#include

#defineP3.14

intmain()

{

floatr,s,c;

scanf("%f",&r);

s=P*r*r;

c=2*r*P;

printf("Area:

%f\n",s);

printf("Perimeter:

%f\n",c);

return0;

}

(1-4)

Description

求3个数的平均值。

Input

输入只有一行,为3个较小的整数。

Output

输出为这3个整数的平均值,保留3位小数。

SampleInput

123

SampleOutput

2.000

HINT

注意除法运算对整型数据和浮点型数据是不一样的

#include

intmain()

{

inta,b,c;

floatAver;

scanf("%d%d%d",&a,&b,&c);

Aver=(a+b+c)/3.0;

printf("%.3f\n",Aver);

return0;

}

(1-5)

Description

给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。

要计算的外币有三种:

美元、欧元、日元。

Input

输入有三行。

第一行依次为美元、欧元、日元外币汇率,用空格分开。

汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。

汇率浮动范围为(0,10000)。

第二行为外币金额x,第三行为人民币金额y。

x,y均为整数,且0

Output

输出为两行。

第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。

第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。

所有金额精确到小数点后两位。

SampleInput

668.5200908.06857.9852

1500

1500

SampleOutput

10027.8013621.03119.78

224.38165.1918784.75

HINT

了解浮点数据类型的精确度和输出控制。

#include

intmain()

{

doublex,y;

doublea,b,c,i,j,k,l,m,n;

scanf("%lf%lf%lf",&a,&b,&c);

scanf("%lf",&x);

scanf("%lf",&y);

i=x/100*a;

j=x/100*b;

k=x/100*c;

l=y/a*100;

m=y/b*100;

n=y/c*100;

printf("%.2lf%.2lf%.2lf\n",i,j,k);

printf("%.2lf%.2lf%.2lf\n",l,m,n);

return0;

}

(1-6)

ProblemF:

求字符的值

TimeLimit:

1SecMemoryLimit:

2MB

Submit:

562Solved:

373

[Submit][Status][WebBoard]

Description

从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。

Input

输入为3个字符。

Output

输出为3行。

每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。

每个输出的值占3个字符,不足3个字符前面补0。

SampleInput

0A

SampleOutput

048060030

032040020

065101041

HINT

了解字符值的存储和整型的关系。

#include

intmain()

{

chara,b,c;

scanf("%c%c%c",&a,&b,&c);

printf("%.3d%.3o%.3x\n",a,a,a);

printf("%.3d%.3o%.3x\n",b,b,b);

printf("%.3d%.3o%.3x\n",c,c,c);

return0;

}

(1-7)

ProblemG:

奇数还是偶数?

TimeLimit:

1SecMemoryLimit:

2MB

Submit:

575Solved:

455

[Submit][Status][WebBoard]

Description

输入一个整数,判读它是奇数还是偶数。

Input

输入只有一行,为一个100以内的正整数。

Output

输出为一行。

若输入为偶数则输出“even”,奇数输出“odd”。

SampleInput

30

SampleOutput

even

HINT

用整数运算可以解决,练习“?

:

”表达式。

#include

intmain()

{

inta;

(0

scanf("%d",&a);

if(a%2==0)

printf("even\n");

else

printf("odd\n");

return0;

}

(1-8)

ProblemH:

绝对值

TimeLimit:

1SecMemoryLimit:

2MB

Submit:

840Solved:

376

[Submit][Status][WebBoard]

Description

求整型数据和浮点型数据的绝对值。

Input

输入两个数,第一个是整数,第二个是浮点数。

Output

输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。

SampleInput

-1

1

SampleOutput

1

1

HINT

求绝对值可以用标准库函数来完成,也可以自己判断。

注意浮点数的输出格式。

求绝对值的函数在哪个头文件?

貌似很多人会搞错,包括很多编书的人!

#include

#include

#include

intmain()

{

inta,c;

doubleb,d;

scanf("%d\n%lf",&a,&b);

c=abs(a);

d=fabs(b);

printf("%d\n%g",c,d);

return0;

}

(1-9)

ProblemI:

简单的打折计算

TimeLimit:

1SecMemoryLimit:

2MB

Submit:

919Solved:

435

[Submit][Status][WebBoard]

Description

商店规定:

消费满n元,可以打八八折。

设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:

元),精确到分。

Input

输入只有一行,三个整数m、n和x,且0

Output

输出金额,精确到分。

SampleInput

953004

SampleOutput

334.40

HINT

了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。

#include

intmain()

{

intm,x,n,a;

floatb;

scanf("%d%d%d",&m,&n,&x);

0

x

m

a=m*x;

if(a>n)

b=0.88*a;

else

b=a;

printf("%.2f\n",b);

return0;

}

(1-10)

ProblemJ:

判断闰年

TimeLimit:

1SecMemoryLimit:

2MB

Submit:

939Solved:

443

[Submit][Status][WebBoard]

Description

输入一个正整数的年份,判断是否为闰年。

Input

输入只有一行,为一个10000以内的正整数。

Output

输出为一行。

若输入为闰年偶数则输出“Yes”,否则输出“No”。

SampleInput

2010

SampleOutput

No

HINT

了解逻辑运算符和关系运算符。

#include

intmain()

{

inta;

0

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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 交通运输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1