ImageVerifierCode 换一换
格式:DOCX , 页数:54 ,大小:86.72KB ,
资源ID:12738438      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12738438.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(山东科技大学OJ部分题目记答案.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

山东科技大学OJ部分题目记答案.docx

1、山东科技大学OJ部分题目记答案/Problem D: 货币兑换Description给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。要计算的外币有三种:美元、欧元、日元。Input输入有三行。第一行依次为美元、欧元、日元外币汇率,用空格分开。汇率用100外币为单位,准确到小数点后4位,如668.5200表示“100美元=668.5200人民币。汇率浮动围为(0,10000)。第二行为外币金额x,第三行为人民币金额y。x,y均为整数,且0x,y10000。Output输出为两行。第一行为金额为x的美元、欧元、日元兑换成人民币的金

2、额,用空格分开。第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。所有金额准确到小数点后两位。Sample Input668.5200 908.0685 7.985215001500Sample Output10027.80 13621.03 119.78#include int main() double i,j,k,a,b,c,d,e,f; double x,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

3、*100/k; printf (%.2lf %.2lf %.2lfn,a,b,c); printf (%.2lf %.2lf %.2lfn,d,e,f);/Problem E: 求字符的值/Description从键盘输入3个字符不含双字节字符,分别输出每个字符的十进制值ASCII码、八进制值和十六进制值。Input输入为3个字符。Output输出为3行。每一行为每个字符对应输入顺序的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,缺乏3个字符前面补0。Sample Input0 ASample Output048 060 030032 040 020065 101 041#

4、include int main() char x,y,z; scanf (%c%c%c,&x,&y,&z); printf (%.3d %.3o %.3xn,x,x,x); printf (%.3d %.3o %.3xn,y,y,y); printf (%.3d %.3o %.3xn,z,z,z);Problem A: 简单的打折计算Description商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购置的件数x,计算出需要支付的金额单位:元,准确到分。Input输入只有一行,三个整数m、n和x,且0xmn1000。Output输出金额,准确到分。Sample Input95

5、300 4Sample Output334.40HINT了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。#include int main()int m,n,x;float s;scanf (%d %d %d,&m,&n,&x);if (m*x=n) s=m*x*0.88;else s=m*x;printf (%.2f,s);Problem C: 水仙花数Description如果一个三位十进制数等于其各位数字的立方和,那么称这个数为水仙花数。如:13+53+33=153。Input一个整数x,100=x=999。Outputx是水仙花数,那么输出“YES,否那么为“NO。

6、#include int main() int x,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);Problem A: 多少钞票Description 客户去商店买东西时,不超过100美金的账单喜欢用现金支付。商店喜欢用最少的钞票给付客户的找零。请你编写一个程序帮助商店计算出:当客户买了x元商品给了一100美元的钞票后,商店应该付给客户多少20美元、10美元、5美元和1美元的钞票,使得钞票总数最少。假设不存在其他面值的钞票,也不会有

7、几角几分的价格,商店的各种钞票总是够用的。Input输入一个整数x,0x100。Output按顺序输出20美金、10美金、5美金和1美金面值的钞票数。输出格式见sample。Sample Input7Sample Output$20 bills: 4$10 bills: 1 $5 bills: 0 $1 bills: 3#include int main()int x,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 ($20 bills: %dn,a)

8、;printf ($10 bills: %dn,b);printf ( $5 bills: %dn,c);printf ( $1 bills: %dn,d);Problem B: 自动拨出的程序Sample Input(0532)621-15486Sample Output008653262115486HINT这是个可以用scanf()解决的问题,请注意都是数字这个规律。#include int main() int a,b,c; scanf(0%d)%d-%d,&a,&b,&c); printf(0086%d%d%d,a,b,c);/Problem C: 求1+2+.+n=?Descript

9、ion给定一个n,求出s = 1+2+3+.+n的值。Input输入只有一行,包含一个正整数n(n=232)。Output输出一行,为1+2+.+n的值。Sample Input10Sample Output55HINTn的数据围大,需注意数据类型的选择和计算次序,以防止数据溢出。#include int main() unsigned long long int n,s,i; scanf(%llu,&n); if(n%2=0) s=n/2*(n+1); else s=(n+1)/2*n; printf (%llu,s);/Problem D: 2的多少次幂Description从键盘输入一个

10、数x,x是2的整数次幂x=2y,请编程求出y的值。Input一个非负有理数x,x在0,2256围。Output一个整数y。#include #include int main()double x,n; scanf (%lf,&x); n=(log10(x)/(log10(2); printf (%d,(int)n);/Problem A: 输出是m的倍数或n的倍数、但不是m和n的公倍数的数Description输出1k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1=m,nk100,且m与n不相等。Input输入三个整数,依次为k、m、 n。Output从小到大输出符合题意的所有整数

11、,两数之间用一个空格分开。Sample Input15 2 3Sample Output2 3 4 8 9 10 14 15#include int main() int k,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); /Problem B: n个数的最大值和最小值Description找出n个数中最大的数和最小的数,并将它们的值输出出来。Input输入为n+1个整数,

12、都在int类型围。这些数可能用假设干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开场,求出直到第n+1个数中最大的数和最小的数。Sample Input3 0 1 -1Sample OutputThe maximum number is 1.The minimum number is -1.#include int main() int i,n,m,max,min; scanf (%d%d,&n,&max); min=max; for(i=1;imax) max=m; if(mmin) min=m; printf(The maximum number is

13、%d.nThe minimum numberis %d.,max,min);Problem C: 成绩的等级Description把百分制的考试成绩转换成五级制的成绩:90100:Excellent8089:Good7079:Average6069:Pass059:Failing不在0100之间的输入是非法数据,输出“Error。Input输入多行,每行一个整数。Output输入所对应的成绩等级。#include #include #include string.hint main() int n; while (scanf (%d,&n)!=EOF) if (n=100) printf (E

14、xcellentn); else if(n100) printf (Errorn); else switch (n/10) case 9:printf (Excellentn);break; case 8:printf (Goodn);break; case 7:printf (Averagen);break; case 6:printf (Passn);break; default :printf (Failingn); return 0;/Problem E: A+B Problem (II) : Input/Output PraticeDescription计算a+b,0=a,b1000

15、。Input输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。Output每行输出一个a+b的和,顺序与输入对应。Sample Input21 210 20Sample Output330HINTN给出了测试样例数,用for循环处理方便。#include int main() int N,i,j; scanf(%d,&N); int aN2; for (i=0;iN;i+) for (j=0;j2;j+) scanf (%d,&aij); for (i=0;iN;i+) printf (%dn,ai0+ai1);Problem A: A+B Problem (

16、III) : Input/Output PraticeDescription计算a+b,0=a,b1000。Input输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入完毕,0 0不参与运算。Sample Input1 210 200 0Sample Output330#include int main() int a,b; while(1) scanf(%d %d,&a,&b); if(a=0&b=0) break; else printf(%dn,a+b); Problem C: 只有一个二元运算符的表达式运算Description编程序读入并计算只有

17、一个二元运算符的表达式的值。用到的二元运算符有:“+、“-、“*、“/、“%,与C语言的语法一致。Input每行输入一个表达式,格式为:二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。测试样例不存在除数为0的情况。输入以a和b为0,且用一个空格分开完毕。Output每行对应输入的运算符为“+、“-、“*、“/、“%,那么计算a+b、a-b、a*b、a/b、a%b的值;否那么输出“invalid op。HINT教材上有非常相似的例题可以参考。#include int main() int a,b; char i; while(1) scanf (%d%c%d,&a,&i,&b);

18、 if(a=0&b=0&i=32) break; else switch(i) case +:printf(%dn,a+b);break; case -:printf(%dn,a-b);break; case *:printf(%dn,a*b);break; case /:printf(%dn,a/b);break; case %:printf(%dn,a%b);break; default:printf(invalid opn); Problem D: 求100以的素数Description素数是只能被1和自身整除的正整数,根据数学定义1不是素数。素数也叫质数。Input输入为两个整数m和n

19、,满足0=m=n=100。Output从大到小输出mn之间的所有素数,一个素数一行。如果mn之间没有素数,那么不输出任何数。输出的所有数在两行“=之间。Sample Input2 12Sample Output=117532=HINT利用素数的数学规律可以很容易的解出此题,题目给出的数据围是关键。#include int main() int m,n,i,j,k; scanf(%d %d,&m,&n); printf(=n); for(i=n;i=m;i-) k=0; for(j=1;ji;j+) if(i%j=0) k+; if(k=1) printf(%dn,i); printf(=);P

20、roblem E: 十进制整数转二进制Description给出一个十进制的非负整数x,x=216,把它转换成二进制数输出。Input输入为多行,每行一个整数x,至读入EOF完毕。Output每行输出x对应的二进制数值。#include int main() int i,j,m,n,k; int a17; while(scanf(%d,&n)!=EOF) if(n=0) printf(0n); else for(m=0;m=0;m-) if(am=1) k=m; break; for(m=k;m=0;m-) printf(%d,am); printf(n); /Problem F: 辗转相除法

21、最大公约数的算法Description辗转相除法,也称欧几里得算法,是求最大公约数的算法。Input输入为多行,每行有一对非负整数a,b,且a*b不会超出int类型的数据围。输入至EOF完毕。Output每行输出一对a,b的最大公约数和最小公倍数,顺序与输入对应。从数论上的整除定义出发:假设a整除bb除以a没有余数,那么b是a的倍数,a是b的约数,这里要求b不为0。因此0是任意整数的倍数,但是0不能是约数。#include int main() int a,b,c,m,t; while(scanf(%d %d,&a,&b)!=EOF) if(a=0&b!=0) printf(%d %dn,b,

22、a); else if(a!=0&b=0) printf(%d %dn,a,b); else if(ab) t=a; a=b; b=t; m=a*b;c=a%b; while(c!=0) a=b; b=c; c=a%b; printf(%d %dn,b,m/b); /Problem A: 简单的整数排序Description对给出的假设干整数按从小到大排序。Input输入的第一个数为nn=1000,后接n个整数。Output按从小到大的顺序输出这些整数,每两个整数之间用一个空格分隔开,最后一个整数后面没有空格。Sample Input10 3 9 1 5 2 8 5 6 7 3Sample O

23、utput1 2 3 3 5 5 6 7 8 9#include int main() int i,j,n,t; int a1000; scanf(%d,&n); for(i=0;in;i+) scanf(%d,&ai); for (i=1;in;i+) for(j=0;jaj+1) t=aj; aj=aj+1;aj+1=t; for(i=0;in;i+) if(i=n-1) printf(%d,ai); else printf(%d ,ai); /Problem B: 兔子的繁殖问题Description假设一对兔子每月能生一对小兔一雌一雄,每对小兔出生后的下一个月是没有繁殖能力的,至出生后

24、的第三个月开场又可以每月生一队小兔,问从一对刚出生的小兔开场,经过假设干个月后一共有多少兔子假设在此过程中兔子没有死亡?Input输入的第一个数为n,接下来有n个数字。每个数字为一个月份mm=45。Output输出为n行,每行为第m个月后的兔子总数。Sample Input61 2 3 4 5 10Sample Output1235889HINT当n较大时,菲波那契序列的第n项值和计算量都是很大的,可以先计算出菲波那契序列并用数组存储下来,然后查询出每月兔子数,防止重复运算。#include int main() int i,j,k,n; int a50=0,1,2,b50; for(i=3;

25、i=45;i+) ai=ai-1+ai-2; scanf(%d,&j); for(k=0;kj;k+) scanf(%d,&bk); for(k=0;k0,step不为0。Output把这个等差序列输出在一行里,序列两数之间用一个空格分隔。Sample Inputstart = 1, step = 2, times = 100Sample Output1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85

26、 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173 175 177 179 181 183 185 187 189 191 193 195 197 199HINTAppend Code#include int main() int i,j,k,n; char d100,b100,c100; int a1000; scanf(start = %d, step = %d, times = %d,&i,&j,&k); for(n=0;nk;n+) an=i+j*n; for(n=0;nk;n+) if(n=k-1)

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

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