您好,欢迎访问三七文档
1Oj题目汇集本学期至今oj所有题目汇编实验1ProblemA:简单的打折计算TimeLimit:1SecMemoryLimit:2MBSubmit:2444Solved:1201[Submit][Status][WebBoard]Description商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。Input输入只有一行,三个整数m、n和x,且0xmn1000。Output输出金额,精确到分。SampleInput953004SampleOutput334.40HINT了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。AppendCode答案:#includestdio.hintmain(){doublem,n,x;doubles;scanf(%lf%lf%lf,&m,&n,&x);s=m*x;sn?printf(%.2lf,s):printf(%.2lf,s*0.88);return0;}ProblemB:判断闰年TimeLimit:1SecMemoryLimit:2MBSubmit:2524Solved:1249[Submit][Status][WebBoard]Description输入一个正整数的年份,判断是否为闰年。Input输入只有一行,为一个10000以内的正整数。Output输出为一行。若输入为闰年偶数则输出“Yes”,否则输出“No”。SampleInput2010SampleOutputNoHINT了解逻辑运算符和关系运算符。AppendCode答案:#includestdio.hintmain(){intx;scanf(%d,&x);x%4==0&&x%100!=0||x%400==0?printf(Yes):printf(No);return0;}ProblemC:水仙花数TimeLimit:1SecMemoryLimit:2MBSubmit:2505Solved:1303[Submit][Status][WebBoard]Description如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。Input一个整数x,100=x=999。Outputx是水仙花数,则输出“YES”,否则为“NO”。SampleInput153SampleOutputYESHINTAppendCode答案:#includestdio.hintmain(){inta,b,c,d;scanf(%d,&a);b=a/100;c=(a-b*100)/10;d=a-b*100-c*10;a==b*b*b+c*c*c+d*d*d?printf(YES):printf(NO);return0;}实验2ProblemA:多少张钞票TimeLimit:1SecMemoryLimit:2MBSubmit:1726Solved:912[Submit][Status][WebBoard]Description客户去商店买东西时,不超过100美金的账单喜欢用现金支付。商店喜欢用最少的钞票给付客户的找零。请你编写一个程序帮助商店计算出:当客户买了x元商品给了一张100美元的钞票后,商店应该付给客户多少张20美元、10美元、5美元和1美元的钞票,使得钞票总数最少。假设不存在其他面值的钞票,也不会有几角几分的价格,商店的各种钞票总是够用的。Input输入一个整数x,0x100。Output按顺序输出20美金、10美金、5美金和1美金面值的钞票张数。输出格式见sample。SampleInput7SampleOutput$20bills:4$10bills:1$5bills:0$1bills:3HINT当能支付大面值钞票时不要支付更小面值的钞票,才能满足钞票总数最少,注意scanf()格式的控制。AppendCode答案:#includestdio.hintmain(){inta,b,c,d,e,f,g,h,i;scanf(%d,&a);b=100-a;c=b/20;d=b-20*c;e=d/10;f=d-10*e;g=f/5;h=f-5*g;i=h/1;printf($20bills:%d\n$10bills:%d\n$5bills:%d\n$1bills:%d,c,e,g,i);}ProblemB:自动拨出电话的程序TimeLimit:1SecMemoryLimit:2MBSubmit:1248Solved:962[Submit][Status][WebBoard]Description某外国销售公司需要向国内的一些大型单位打电话推销产品。这个公司的工作场景是这样推销员坐在自己电脑旁边,通过一款自动拨电话的软件与客户联系。所有需要被拨打的电话号码都事先存储在服务器上,推销员不需要每次都很麻烦的输入客户的电话号码,当推销员点击软件里拨打的按钮,下一个电话将会自动拨出。现在你需要编写个程序来模拟这个自动拨电话软件的工作过程。电话号码是按照中国的习惯存储下来的,可能是从网站上抓取的,也可能是扫描的手写件。不过它们都被按照这样的格式存储下来:(城市区号)分区前缀-分机号比如青岛的一个大型单位的某部电话是(0532)621-15486,是指如果在单位内部直接拨打15486就行,在青岛的其他地方要拨打62115486,而在北京要拨打053262115486。根据常识,先拨0就是要转外线,所以一般电话号码的各个部分都不会以0开头。你的程序可以把如上格式的电话号码翻译成一个只包含有数字的串,发送给电话机并拨出。值得注意的是中国的城市区号长度并不相同,比如北京是010。再有不同城市的电话号码位数也不相同,并且不同单位根据内部电话分机数目多少,有的可能只有3位分机号码,有的可能分区前缀号会只有2位。但不管怎样中国现在还没有哪个城市的电话号码超过十位数的。中国的国际区号是0086。这里不含像114这样的特服电话。Input输入只有一行,是符合“(城市区号)分区前缀-分机号”规律的电话号码,这里面除了英文字符“(”、“)”、“-”之外只有数字。Output输出只有一行,是带中国区号的能电话号码。注意从国外打国内的电话,城市区号前面的0是不用拨打的。比如中国青岛的国际分区号是0086532。SampleInput(0532)621-15486SampleOutput008653262115486HINT这是个可以用scanf()解决的问题,请注意电话号码都是数字这个规律。AppendCode答案:#includestdio.hintmain(){inta,b,c;scanf((%d)%d-%d,&a,&b,&c);printf(0086%d%d%d,a,b,c);}ProblemC:求1+2+...+n=?TimeLimit:1SecMemoryLimit:2MBSubmit:5449Solved:1121[Submit][Status][WebBoard]Description给定一个n,求出s=1+2+3+...+n的值。Input输入只有一行,包含一个正整数n(n=232)。Output输出一行,为1+2+...+n的值。SampleInput10SampleOutput55HINTn的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。AppendCode答案:#includestdio.hintmain(){unsignedlonglongintn,s;scanf(%llu,&n);if(n%2==0)s=n/2*(n+1);elses=(n+1)/2*n;printf(%llu,s);}ProblemD:2的多少次幂TimeLimit:1SecMemoryLimit:2MBSubmit:2678Solved:1397[Submit][Status][WebBoard]Description从键盘输入一个数x,x是2的整数次幂(x=2y),请编程求出y的值。Input一个非负有理数x,x在[0,2256]范围内。Output一个整数y。SampleInput1SampleOutput0HINT看起来数据很大,但是用double完全可以存储。为什么?请研究下IEEE-754标准的浮点数存储格式。这里要用到C语言标准库的数学函数。AppendCode答案:#includestdio.h#includemath.hintmain(){doublex,y;scanf(%lf,&x);y=log10(x)/log10(2);printf(%.0lf,y);}ProblemE:三个数比较大小TimeLimit:1SecMemoryLimit:2MBSubmit:2815Solved:1257[Submit][Status][WebBoard]Description从键盘上输入0~100之间的三个数,按从小到大的顺序输出。Input输入只有一行,为三个整数。Output按从小到大输出这三个数。SampleInput151020SampleOutput101520HINT用if语句判断各种情况可以解决这个问题。AppendCode答案:#includestdio.hintmain(){intx,y,z;scanf(%d%d%d,&x,&y,&z);if(xy)if(yz)printf(%d%d%d,z,y,x);elseif(xz)printf(%d%d%d,y,z,x);elseprintf(%d%d%d,y,x,z);elseif(xz)printf(%d%d%d,z,x,y);elseif(yz)printf(%d%d%d,x,z,y);elseprintf(%d%d%d,x,y,z);}实验3ProblemA:输出是m的倍数或n的倍数、但不是m和n的公倍数的数TimeLimit:1SecMemoryLimit:2MBSubmit:3745Solved:1192[Submit][Status][WebBoard]Description输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1=m,nk100,且m与n不相等。Input输入三个整数,依次为k、m、n。Output从小到大输出符合题意的所有整数,两数之间用一个空格分开。SampleInput1523SampleOutput23489101415HINT难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。AppendCode答案:#includestdio.hintmain(){intk,m,n,num=1,x=0;scanf(%d%d%d,&k,&m,&n);while(num=k){if((num%m==0&&num%n!=0)||(num%m!=0&&num%n==0)){x++;if(x==1)printf(%d,num);if(x!=1)printf(%d,num);}num++;}}ProblemB:n个数的最大值和最小值TimeLimit:1SecMemoryLimit:2MBSubmit:2630Solved:1263[Submit][Status][WebBoard]Description找出n个数中最大的数和最小的数,并将它们的值输出出来。Input输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。Output输出为两行,格式见sample。SampleInput301-1SampleOutputThemaximumnumberis1.Theminimumnumberis-1.HINT分隔符是空格还是回车都是空白符,对scanf(%d)来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过
本文标题:山科oj题目
链接地址:https://www.777doc.com/doc-5102299 .html