山东科技大学OJ部分题目记问题详解.docx

上传人:b****3 文档编号:11608308 上传时间:2023-06-01 格式:DOCX 页数:54 大小:88KB
下载 相关 举报
山东科技大学OJ部分题目记问题详解.docx_第1页
第1页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第2页
第2页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第3页
第3页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第4页
第4页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第5页
第5页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第6页
第6页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第7页
第7页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第8页
第8页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第9页
第9页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第10页
第10页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第11页
第11页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第12页
第12页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第13页
第13页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第14页
第14页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第15页
第15页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第16页
第16页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第17页
第17页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第18页
第18页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第19页
第19页 / 共54页
山东科技大学OJ部分题目记问题详解.docx_第20页
第20页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

山东科技大学OJ部分题目记问题详解.docx

《山东科技大学OJ部分题目记问题详解.docx》由会员分享,可在线阅读,更多相关《山东科技大学OJ部分题目记问题详解.docx(54页珍藏版)》请在冰点文库上搜索。

山东科技大学OJ部分题目记问题详解.docx

山东科技大学OJ部分题目记问题详解

//////////ProblemD:

货币兑换

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

#include

intmain()

{

doublei,j,k,a,b,c,d,e,f;

doublex,y;

scanf("%lf%lf%lf",&i,&j,&k);

scanf("%lf%lf",&x,&y);

a=x/100*i;b=y/100*j;c=x/100*k;

d=y*100/i;e=y*100/j;f=y*100/k;

printf("%.2lf%.2lf%.2lf\n",a,b,c);

printf("%.2lf%.2lf%.2lf\n",d,e,f);

}

////ProblemE:

求字符的值////

Description

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

Input

输入为3个字符。

Output

输出为3行。

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

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

SampleInput

0A

SampleOutput

048060030

032040020

065101041

#include

intmain()

{

charx,y,z;

scanf("%c%c%c",&x,&y,&z);

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

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

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

}

ProblemA:

简单的打折计算

Description

商店规定:

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

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

元),精确到分。

Input

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

Output

输出金额,精确到分。

SampleInput

953004

SampleOutput

334.40

HINT

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

#include

intmain()

{intm,n,x;

floats;

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

if(m*x>=n)

s=m*x*0.88;

else

s=m*x;

printf("%.2f",s);

}

ProblemC:

水仙花数

Description

如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。

如:

13+53+33=153。

Input

一个整数x,100<=x<=999。

Output

x是水仙花数,则输出“YES”,否则为“NO”。

#include

intmain()

{

intx,a,b,c;

scanf("%d",&x);

a=x%10;

b=x/10%10;

c=x/100;

if(a*a*a+b*b*b+c*c*c==x)

printf("YES");

else

printf("NO");

}

ProblemA:

多少张钞票

Description

   客户去商店买东西时,不超过100美金的账单喜欢用现金支付。

商店喜欢用最少的钞票给付客户的找零。

请你编写一个程序帮助商店计算出:

当客户买了x元商品给了一张100美元的钞票后,商店应该付给客户多少张20美元、10美元、5美元和1美元的钞票,使得钞票总数最少。

假设不存在其他面值的钞票,也不会有几角几分的价格,商店的各种钞票总是够用的。

Input

输入一个整数x,0

Output

按顺序输出20美金、10美金、5美金和1美金面值的钞票张数。

输出格式见sample。

SampleInput

7

SampleOutput

$20bills:

4

$10bills:

1

$5bills:

0

$1bills:

3

#include

intmain()

{intx,s,a,b,c,d;

scanf("%d",&x);

s=100-x;

a=s/20;

b=(s-20*a)/10;

c=(s-20*a-10*b)/5;

d=s-20*a-10*b-c*5;

printf("$20bills:

%d\n",a);

printf("$10bills:

%d\n",b);

printf("$5bills:

%d\n",c);

printf("$1bills:

%d\n",d);

}

ProblemB:

自动拨出电话的程序

SampleInput

(0532)621-15486

SampleOutput

008653262115486

HINT

这是个可以用scanf()解决的问题,请注意电话号码都是数字这个规律。

#include

intmain()

{

inta,b,c;

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

printf("0086%d%d%d",a,b,c);

}

///////ProblemC:

求1+2+...+n=?

Description

给定一个n,求出s=1+2+3+...+n的值。

Input

输入只有一行,包含一个正整数n(n<=232)。

Output

输出一行,为1+2+...+n的值。

SampleInput

10

SampleOutput

55

HINT

n的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。

#include

intmain()

{

unsignedlonglongintn,s,i;

scanf("%llu",&n);

if(n%2==0)

s=n/2*(n+1);

else

s=(n+1)/2*n;

printf("%llu",s);

}

/////////////ProblemD:

2的多少次幂

Description

从键盘输入一个数x,x是2的整数次幂(x=2y),请编程求出y的值。

Input

一个非负有理数x,x在[0,2256]范围内。

Output

一个整数y。

#include

#include

intmain()

{doublex,n;

scanf("%lf",&x);

n=(log10(x))/(log10

(2));

printf("%d",(int)n);

}

////ProblemA:

输出是m的倍数或n的倍数、但不是m和n的公倍数的数

Description

输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n

Input

输入三个整数,依次为k、m、n。

Output

从小到大输出符合题意的所有整数,两数之间用一个空格分开。

SampleInput

1523

SampleOutput

23489101415

#include

intmain()

{

intk,m,n,i=0,j;

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

for(j=1;j<=k;j++)

{

if((j%m==0&&j%n!

=0)||(j%m!

=0&&j%n==0))

{i++;

if(i==1)

printf("%d",j);

else

printf("%d",j);}

}

}

/////ProblemB:

n个数的最大值和最小值

Description

找出n个数中最大的数和最小的数,并将它们的值输出出来。

Input

输入为n+1个整数,都在int类型范围内。

这些数可能用若干空格或者换行符分隔开。

输入的第1个数为n,表示后续有n个数输入。

从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。

SampleInput

301-1

SampleOutput

Themaximumnumberis1.

Theminimumnumberis-1.

#include

intmain()

{

inti,n,m,max,min;

scanf("%d%d",&n,&max);

min=max;

for(i=1;i

{scanf("%d",&m);

if(m>max)

max=m;

if(m

min=m;}

printf("Themaximumnumberis%d.\nTheminimumnumberis%d.",max,min);

}

ProblemC:

成绩的等级

Description

把百分制的考试成绩转换成五级制的成绩:

90~100:

Excellent

80~89:

Good

70~79:

Average

60~69:

Pass

0~59:

Failing

不在0~100之间的输入是非法数据,输出“Error”。

Input

输入多行,每行一个整数。

Output

输入所对应的成绩等级。

#include

#include

#include"string.h"

intmain()

{

intn;

while(scanf("%d",&n)!

=EOF)

{

if(n==100)

printf("Excellent\n");

elseif(n<0||n>100)

printf("Error\n");

else

switch(n/10)

{case9:

printf("Excellent\n");break;

case8:

printf("Good\n");break;

case7:

printf("Average\n");break;

case6:

printf("Pass\n");break;

default:

printf("Failing\n");

}

}

return0;

}

 

/////ProblemE:

A+BProblem(II):

Input/OutputPratice

Description

计算a+b,0<=a,b<1000。

Input

输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。

Output

每行输出一个a+b的和,顺序与输入对应。

SampleInput

2

12

1020

SampleOutput

3

30

HINT

N给出了测试样例数,用for循环处理方便。

#include

intmain()

{

intN,i,j;

scanf("%d",&N);

inta[N][2];

for(i=0;i

{

for(j=0;j<2;j++)

scanf("%d",&a[i][j]);

}

for(i=0;i

printf("%d\n",a[i][0]+a[i][1]);

}

ProblemA:

A+BProblem(III):

Input/OutputPratice

Description

计算a+b,0<=a,b<1000。

Input

输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。

当测试样为00时表示输入结束,00不参与运算。

SampleInput

12

1020

00

SampleOutput

3

30

#include

intmain()

{inta,b;

while

(1)

{

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

if(a==0&&b==0)

break;

else

printf("%d\n",a+b);

}

}

ProblemC:

只有一个二元运算符的表达式运算

Description

编程序读入并计算只有一个二元运算符的表达式的值。

用到的二元运算符有:

“+”、“-”、“*”、“/”、“%”,与C语言的语法一致。

Input

每行输入一个表达式,格式为:

二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。

测试样例不存在除数为0的情况。

输入以a和b为0,且用一个空格分开结束。

Output

每行对应输入的运算符为“+”、“-”、“*”、“/”、“%”,则计算a+b、a-b、a*b、a/b、a%b的值;否则输出“invalidop”。

HINT

教材上有非常相似的例题可以参考。

#include

intmain()

{

inta,b;

chari;

while

(1)

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

if(a==0&&b==0&&i==32)

break;

else

{switch(i)

{

case'+':

printf("%d\n",a+b);break;

case'-':

printf("%d\n",a-b);break;

case'*':

printf("%d\n",a*b);break;

case'/':

printf("%d\n",a/b);break;

case'%':

printf("%d\n",a%b);break;

default:

printf("invalidop\n");

}

}

}

}

ProblemD:

求100以内的素数

Description

素数是只能被1和自身整除的正整数,根据数学定义1不是素数。

素数也叫质数。

Input

输入为两个整数m和n,满足0<=m<=n<=100。

Output

从大到小输出m~n之间的所有素数,一个素数一行。

如果m~n之间没有素数,则不输出任何数。

输出的所有数在两行“=====”之间。

SampleInput

212

SampleOutput

=====

11

7

5

3

2

=====

HINT

利用素数的数学规律可以很容易的解出此题,题目给出的数据范围是关键。

#include

intmain()

{

intm,n,i,j,k;

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

printf("=====\n");

for(i=n;i>=m;i--)

{k=0;

for(j=1;j

if(i%j==0)

k++;

if(k==1)

printf("%d\n",i);

}

printf("=====");

}

ProblemE:

十进制整数转二进制

Description

给出一个十进制的非负整数x,x<=216,把它转换成二进制数输出。

Input

输入为多行,每行一个整数x,至读入EOF结束。

Output

每行输出x对应的二进制数值。

#include

intmain()

{

inti,j,m,n,k;

inta[17];

while(scanf("%d",&n)!

=EOF)

{if(n==0)

printf("0\n");

else

{

for(m=0;m<=16;m++)

{

i=n%2;

j=n/2;

n=j;

a[m]=i;

}

for(m=16;m>=0;m--)

{

if(a[m]==1)

{k=m;

break;}

}

for(m=k;m>=0;m--)

printf("%d",a[m]);

printf("\n");

}

}

}

/////ProblemF:

辗转相除法最大公约数的算法

Description

辗转相除法,也称欧几里得算法,是求最大公约数的算法。

Input

输入为多行,每行有一对非负整数a,b,且a*b不会超出int类型的数据范围。

输入至EOF结束。

Output

每行输出一对a,b的最大公约数和最小公倍数,顺序与输入对应。

从数论上的整除定义出发:

若a整除b(b除以a没有余数),则b是a的倍数,a是b的约数,这里要求b不为0。

因此0是任意整数的倍数,但是0不能是约数。

#include

intmain()

{inta,b,c,m,t;

while(scanf("%d%d",&a,&b)!

=EOF)

{if(a==0&&b!

=0)

printf("%d%d\n",b,a);

elseif(a!

=0&&b==0)

printf("%d%d\n",a,b);

else

{if(a

m=a*b;c=a%b;

while(c!

=0){a=b;b=c;c=a%b;}

printf("%d%d\n",b,m/b);}}}

////ProblemA:

简单的整数排序

Description

对给出的若干整数按从小到大排序。

Input

输入的第一个数为n(n<=1000),后接n个整数。

Output

按从小到大的顺序输出这些整数,每两个整数之间用一个空格分隔开,最后一个整数后面没有空格。

SampleInput

103915285673

SampleOutput

1233556789

#include

intmain()

{

inti,j,n,t;inta[1000];

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

for(i=1;i

for(j=0;j

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

for(i=0;i

{if(i==n-1)

printf("%d",a[i]);

else

printf("%d",a[i]);

}

}

/////ProblemB:

兔子的繁殖问题

Description

假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)?

Input

输入的第一个数为n,接下来有n个数字。

每个数字为一个月份m(m<=45)。

Output

输出为n行,每行为第m个月后的兔子总数。

SampleInput

6

1234510

SampleOutput

1235889

HINT

当n较大时,菲波那契序列的第n项值和计算量都是很大的,可以先计算出菲波那契序列并用数组存储下来,然后查询出每月兔子数,避免重复运算。

#include

intmain()

{

inti,j,k,n;

inta[50]={0,1,2},b[50];

for(i=3;i<=45;i++)

a[i]=a[i-1]+a[i-2];

scanf("%d",&j);

for(k=0;k

scanf("%d",&b[k]);

for(k=0;k

printf("%d\n",a[b[k]]);

}

//////ProblemC:

产生等差序列之一

Description

根据给出的初始数、公差和序列长度求等差序列。

Input

输入为一行,格式见sample。

其中,start为初始数,step为公差,times为序列长度。

满足,times>0,step不为0。

Output

把这个等差序列输出在一行里,序列两数之间用一个空格分隔。

SampleInput

start=1,step=2,times=100

SampleOutput

13579111315171921232527293133353739414345474951535557596163656769717375777981838587899193959799101103105107109111113115117119121123125127129131133135137139141143145147149151153155157159161163165167169171173175177179181183185187189191193195197199

HINT

AppendCode

#include

intmain()

{

inti,j,k,n;

chard[100],b[100],c[100];

inta[1000];

scanf("start=%d,step=%d,times=%d",&i,&j,&k);

for(n=0;n

{

a[n]=i+j*n;

}

for(n=0;n

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2