山东科技大学OJ部分题目记答案.docx
《山东科技大学OJ部分题目记答案.docx》由会员分享,可在线阅读,更多相关《山东科技大学OJ部分题目记答案.docx(7页珍藏版)》请在冰豆网上搜索。
![山东科技大学OJ部分题目记答案.docx](https://file1.bdocx.com/fileroot1/2022-10/10/3ffcd36e-1cbf-429a-8611-37c57ef258da/3ffcd36e-1cbf-429a-8611-37c57ef258da1.gif)
山东科技大学OJ部分题目记答案
山东科技大学OJ部分题目记答案
//////////ProblemD:
货币兑换Description 给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。
要计算的外币有三种:
美元、欧元、日元。
Input 输入有三行。
第一行依次为美元、欧元、日元外币汇率,用空格分开。
汇率用100外币为单位,精确到小数点后4位,如表示“100美元=人民币”。
汇率浮动范围为(0,10000)。
第二行为外币金额x,第三行为人民币金额y。
x,y均为整数,且0 输出为两行。
第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。
第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。
所有金额精确到小数点后两位。
SampleInput 15001500 SampleOutput #includeintmain(){ doublei,j,k,a,b,c,d,e,f; doublex,y; scanf(\ scanf(\ 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(\ printf(\} ////ProblemE:
求字符的值//// Description 从键盘输入3个字符,分别输出每个字符的十进制值、八进制值和十六进制值。
Input 输入为3个字符。
Output 输出为3行。
每一行为每个字符的十进制、八进制和十六进制值,用空格分隔开。
每个输出的值占3个字符,不足3个字符前面补0。
SampleInput 0A SampleOutput 048060030032040020 065101041 #includeintmain(){ charx,y,z; scanf(\ printf(\ printf(\ printf(\} ProblemA:
简单的打折计算Description 商店规定:
消费满n元,可以打八八折。
设某件商品标价m元,输入购买的件数x,计算出需要支付的金额,精确到分。
Input 输入只有一行,三个整数m、n和x,且0 输出金额,精确到分。
SampleInput 953004 SampleOutput HINT 了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。
#includeintmain(){intm,n,x;floats; scanf(\if(m*x>=n) s=m*x*;else s=m*x; printf(\} ProblemC:
水仙花数Description 如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。
如:
13+53+33=153。
Input 一个整数x,100 x是水仙花数,则输出“YES”,否则为“NO”。
#includeintmain(){ intx,a,b,c; scanf(\ a=x; b=x/10; c=x/100; if(a*a*a+b*b*b+c*c*c==x) printf(\ else printf(\} ProblemA:
多少张钞票Description 客户去商店买东西时,不超过100美金的账单喜欢用现金支付。
商店喜欢用最少的钞票给付客户的找零。
请你编写一个程序帮助商店计算出:
当客户买了x元商品给了一张100美元的钞票后,商店应该付给客户多少张20美元、10美元、5美元和1美元的钞票,使得钞票总数最少。
假设不存在其他面值的钞票,也不会有几角几分的价格,商店的各种钞票总是够用的。
Input 输入一个整数x,0 按顺序输出20美金、10美金、5美金和1美金面值的钞票张数。
输出格式见sample。
SampleInput 7 SampleOutput $20bills:
4$10bills:
1$5bills:
0$1bills:
3 #includeintmain() {intx,s,a,b,c,d;scanf(\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(\printf(\printf(\printf(\} ProblemB:
自动拨出电话的程序SampleInput (0532)621-15486 SampleOutput 008653262115486 HINT 这是个可以用scanf()解决的问题,请注意电话号码都是数字这个规律。
#includeintmain(){ inta,b,c; scanf(\ printf(\} ///////ProblemC:
求1+2+...+n=?
Description 给定一个n,求出s=1+2+3+...+n的值。
Input 输入只有一行,包含一个正整数n(n 输出一行,为1+2+...+n的值。
SampleInput 10 SampleOutput 55 HINT n的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。
#includeintmain(){ unsignedlonglongintn,s,i; scanf(\ if(n%2==0) s=n/2*(n+1); else s=(n+1)/2*n; printf(\} /////////////ProblemD:
2的多少次幂Description 从键盘输入一个数x,x是2的整数次幂,请编程求出y的值。
Input 一个非负有理数x,x在[0,2256]范围内。
Output 一个整数y。
#include#includeintmain(){doublex,n; scanf(\ n=(log10(x))/(log10
(2));printf(\} ////ProblemA:
输出是m的倍数或n的倍数、但不是m和n的公倍数的数 Description 输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1 输入三个整数,依次为k、m、n。
Output 从小到大输出符合题意的所有整数,两数之间用一个空格分开。
SampleInput 1523 SampleOutput 23489101415 #includeintmain(){ intk,m,n,i=0,j; scanf(\ for(j=1;j if((j%m==0&&j%n!
=0)||(j%m!
=0&&j%n==0)) {i++; if(i==1) printf(\ else printf(\ }} /////ProblemB:
n个数的最大值和最小值 Description 找出n个数中最大的数和最小的数,并将它们的值输出出来。
Input 输入为n+1个整数,都在int类型范围内。
这些数可能用若干空格或者换行符分隔开。
输入的第1个数为n,表示后续有n个数输入。
从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。
SampleInput 301-1 SampleOutput Themaximumnumberis1.Theminimumnumberis-1. #includeintmain(){ inti,n,m,max,min; scanf(\ min=max; for(i=1;i {scanf(\ if(m>max) max=m; if(m printf(\} ProblemC:
成绩的等级Description
把百分制的考试成绩转换成五级制的成绩:
90~100:
Excellent80~89:
Good70~79:
Average60~69:
Pass0~59:
Failing 不在0~100之间的输入是非法数据,输出“Error”。
Input 输入多行,每行一个整数。
Output 输入所对应的成绩等级。
#include#include#include\intmain(){ intn; while(scanf(\ { if(n==100) printf(\ elseif(n100) printf(\ else switch(n/10) {case9:
printf(\ case8:
printf(\ case7:
printf(\ case6:
printf(\ default:
printf(\ } } return0;} /////ProblemE:
A+BProblem(II):
Input/OutputPratice Description 计算a+b,0 输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。
Output 每行输出一个a+b的和,顺序与输入对应。
SampleInput 2121020 SampleOutput 330 HINT N给出了测试样例数,用for循环处理方便。
#includeintmain(){ intN,i,j; scanf(\ inta[N][2]; for(i=0;i for(j=0;j scanf(\ } for(i=0;i printf(\} ProblemA:
A+BProblem(III):
Input/OutputPraticeDescription 计算a+b,0 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。
当测试样为00时表示输入结束,00不参与运算。
SampleInput 12102000 SampleOutput 330 #includeintmain(){inta,b; while
(1) { scanf(\ if(a==0&&b==0) break; else printf(\ }} ProblemC:
只有一个二元运算符的表达式运算Description 编程序读入并计算只有一个二元运算符的表达式的值。
用到的二元运算符有:
“+”、“-”、“*”、“/”、“%”,与C语言的语法一致。
Input 每行输入一个表达式,格式为:
二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。
测试样例不存在除数为0的情况。
输入以a和b为0,且用一个空格分开结束。
Output 每行对应输入的运算符为“+”、“-”、“*”、“/”、“%”,则计算a+b、a-b、a*b、a/b、a%b的值;否则输出“invalidop”。
HINT 教材上有非常相似的例题可以参考。
#includeintmain(){ inta,b; chari; while
(1) {scanf(\ if(