物联网网络OJ复习解析_第1页
物联网网络OJ复习解析_第2页
物联网网络OJ复习解析_第3页
物联网网络OJ复习解析_第4页
物联网网络OJ复习解析_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、针对做过去的一些通过率低的题做了一个World,大家可以看看,不会的话可以问问我或者前面的同学,这些弄懂的话,考试把握也很大了Problem E: 一年中的第几天Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 1873 Solved: 645Submit Status Web BoardDescriptio n给出某个日期,判断这是当年的第几天,每年的1月1日是第1天,非闰年年份的12月31 日是第365天。In put输入的第一个数为n,后接n个日期。日期用3个正整数按顺序表示年月日,中 间用“-”连接。Output若输入的日期为错误,则输出“ err

2、or date! ”;否则输出这个日期是本年的第 几天。每个日期对应一行输出。Sample Input92010- 01-012010- 06-222010- 12-312011- 02-292011- 07-182011- 12-022012- 02-292012- 09-312012- 12-31Sample Output1173365error date!19933660error date!366HINT抽象出判断闰年和判断日期合法性的两个函数,能够大大降低程序设计过程中 的思维复杂程度。Append Code这题除了一次一次的加,可以用更简便的方法哦#i ncludeint main

3、()int year,m on th,day;int i,sum;int M15=0,31,0,31,30,31,30,31,31,30,31,30,31;scan f(%d-%d-%d, &year,&mo nth,&day);if(year%4=0&year%100!=0)|(year%400=0) M2=29; else M2=28;for(i=1,sum=0;ieSCITECHCOMCS106SE309CS101TonP 887766554433Jerry50100&010050100Zhang39095. 560758218Li4384562297485fangS8875633&99

4、33. 3Zhao6999999; .597. 542100Llu7808080- 581, 582. 583Iang8765432Song9102030405060MalO7479. 573717077你的任务是:输入这样的成绩表, 成绩。如卜表所示。统计出每个学生的总成绩和各个科目的平均naeSCITECHC0Ir CS106SE309CS101SU*ToP8877P665544333&3Jerry501006010050100460Zhang39095. 560758218420. 5Lil384562297485333VangS887563369933. 3394. 3Zhao6999

5、999. 597- 542100537Liu7808080. 581. 582. 583487. 5Tang876543227Song9102030405060210lalO7479. 573717077444- 5average62. 467- 759. 958- 959. 659. 1In put第一行为两个整数 m,n, 0m=50 0*=10,表示有m个学生和n个成绩。 后面有m+行n+1列的一个表,表的第1行和第1列都是不含空白符的字符串,表 的各列用若干空格分隔,表的各行用一个回车分隔。第1行的2n+1列是各个科目的名字。第2m+行 1列为学生姓名。第2行2列开始到第m+行、n+1

6、列为各学 生的各科目成绩(浮点数)。Output输出为一张表,表的大小为 m+2亍、n+2列,其中前m+行 n+1列的数据与输入相 同。表的最右侧一列为学生各科目成绩的总和,该列第1行的标题是“ sum”。表的最下面一行为各科目的所有学生平均成绩, 该行的第1列标题是“ average ” 表的第1列输出为8个字符左对齐,后面每列为5个字符右对齐,两列之间有2个 空格。表的所有数据项(除第1行和第1列外)都输出为保留1位小数。表的每行 用一个回车分隔,表的最右边一列的数据项后没有空格。请注意:表的最右下角那项没有定义,不输出!最后1行的输出至最右一个科目的平均分结束,该行最后有回车。Sampl

7、e Input10 6n ameSCI TECH COM CS106 SE309 CS101Tom887766554433Jerry501006010050100Zhang3:9095.56C)758218Li4 384562297485Wan g5887563369933.3Zhao6999999.597.542100Liu78080 80.581.582.583Wan g8765432Song9102030405060Ma107479.573717077Sample Outputn ame SCI TECH COM CS106 SE309 CS101 sumTom88.077.066.05

8、5.044.033.0 363.0Jerry50.0 100.060.0100.050.0100.0 460.0Zhang390.095.560.075.082.018.0 420.5Li438.0 45.0 62.0 29.0 74.0 85.0 333.0Wan g588.075.063.036.099.033.3 394.3Zhao699.099.099.597.542.0100.0 537.0Liu780.0 80.0 80.5 81.5 82.5 83.0 487.5Wan g87.06.05.04.03.0 2.0 27.0Song910.020.030.040.050.060.0

9、 210.0Ma1074.079.573.071.070.077.0 444.5average62.467.759.958.959.659.1HINTAppend Code这题的会了的话,输出格式之类的问题应该没有问题了。这里的话,给一种最简便的方法吧,这题还可以使用结构体做,更加直观#i nclude#i nclude#i ncludein tmai n()in tm, n;chara6060;charb6060;doublec6060;doublesum60;doubleaverage60,avsum60;in ti,j,k,l;scan f(%d%d,&m,&n);for(i=0;i=n

10、 ;i+)scan f(%s,ai);for(i=1;i=m;i+)sca nf(%s,bi);for(j=1,sumi=0;j=n;j+)sca nf(%lf,&cij);sumi=cij+sumi;for(j=1;j=n ;j+)for(i=1,avsumi=0;i=m;i+)avsumj=avsumj+cij;averagej=1.0*avsum|j/m;prin tf(%-8s ,a0);for(i=1;i=n ;i+)prin tf(%5s ,ai);prin tf(%5s,sum);prin tf(n);for(i=1;i=m;i+)prin tf(%-8s ,bi);for(j=

11、1;j=n ;j+)prin tf(%5.1f ,cij);prin tf(%5.1f,sumi);prin tf(n);prin tf(%-8s average);for(i=1;i n;i+)prin tf(%5.1f ,averagei);prin tf(%5.1f average n);Problem F:编写函数:素数的判定 (Appe nd Code)Time Limit: 3 Sec Memory Limit: 16 MBSubmit: 1728 Solved: 570Submit Status Web BoardDescriptio n一个正整数n是素数:除了 1和n不能被其他

12、数整除。1不是素数编写一个函数用于判定一个正整数是不是素数。 用C语言实现:append.c中函数原型为 int is_primer(i nt nu m);功能:若num为素数返回1,否则返回0。用C+实现:append.cc中函数原型为 bool isPrimer(i nt nu m);功能:若num为素数返回true,否则返回false 函数的调用格式见“ Append Code”In put每行输入一个正整数n。 n不会超出int类型数据范围。 输入最多不超过20个正整数。Output若n为素数,输出“ YES,否则输出“ NO。Sample Input12345678921474836

13、47Sample OutputNOYESYESNOYESNOYESNONOYESHINT如果你是按照从小到大的顺序选择除数去判定一个数,那么你超时的原因多半 是用了太多不必要的除数。程序需要优化,减少循环的次数。Append Codeappend.c, append.cc ,经典的素数判定注意判定的方法! #i nclude#in cludein tis_primer(i ntnum);in tis_primer(i ntnum)inti;if(num=1)return0;elseif( num=2) retur n1;elseif( nu m%2=0)retur nO; elsefor(i=

14、2;isqrt (num)returnl;in tmai n()intnum;while(sca nf(%d, &num) != EOF)if(is_primer( nu m)puts(YES);elseputs(NO);return。;Problem D:只有一个二元运算符的表达式运算Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 4119 Solved: 1563Submit Status Web BoardDescriptio n编程序读入并计算只有一个二元运算符的表达式的值。用到的二元运算符有:“ +”、“ - ”、“ * ”、“ /”、“ %,

15、与 C 语言的语法一致。In put每行输入一个表达式,格式为:二个整型的操作数a和b,中间用一个符号分开, 这个符号就是运算符。测试样例不存在除数为 0的情况。输入以a和b为0,且用一个空格分开结束。Output每行对应输入的运算符为“ +”、“ - ”、“ *,则计算a+b、a-b、a*b、a/b、a%b 的值;否则输出 “ in valid op ”。Sample Input33+58*92.21-617/39%3 0 0Sample Output3872in valid op-550HINT教材上有非常相似的例题可以参考Append Code这个没什么说的,看看吧,练习判断的#i nc

16、lude in tma in()in ta,b;chare;for(;sca nf(%d%c%d,&a,&c,&b);) if(a=O&c= &b=O)break; elseif(c=+)pri ntf(%dn,a+b); elseif(c=-)pri ntf(%dn,a-b); elseif(c=*)pri ntf(%dn,a*b); elseif(c=/)pri ntf(%dn,a/b); elseif(c=%)pri ntf(%dn,a%b); elsepri ntf(i nv alid opn);Problem D:摄氏华氏温度转换表Time Limit: 1 Sec Memory L

17、imit: 2 MBSubmit: 5380 Solved: 1412Submit Status Web BoardDescriptio n已知华氏温度F,转换为摄氏温度C的公式为C=(F-32)*5/9 。输出给定范围(从low到high )和步长(step )的摄氏华氏温度转换表In put第1行若为“ C-F”表示输出:摄氏一一华氏温度转换表,若为“F-C”表示输出:华氏摄氏温度转换表。第2、3行为两个整数:high和low,其值在-100到200之间。第4行为step,step精确到小数点后1位。Output输出第一行为C和F,分别表示摄氏和华氏,与小数点对齐。若输出摄氏华氏温度转换表

18、,则C在前、F在后;反之,则输出华氏一一摄氏温度转换表。 从输出的第2行开始为从温度low到温度high (包括low和high )的转换表, 温度输出精确到小数点后1位,表格被“- ”分为两个宽度相同的部分,其它的 测试样例也不会给出超出宽度的数据,格式详见sample。Sample InputC-F-10402.5Sample OutputC -F10.0-14.0-7.5 -18.5-5.0 -23.0-2.5 -27.50.0 -32.02.5 -36.55.0 -41.07.5 -45.510.0-50.012.5-54.515.0-59.017.5-63.520.0-68.022.

19、5-72.525.0-77.027.5-81.530.0-86.032.5-90.535.0-95.037.5-99.540.0- 104.0HINT输出格式可以通过sample分析出来,因为两栏的总宽度是固定的。一个隐藏的 陷阱是step是浮点数,某些浮点数是无法精确存储的,因此经过一定量的计算 后这个误差会影响到浮点数的相等性判断,需要加上精度控制。Append Code这个精度控制的,需要好好看看!作业做出来的人不多!#i nclude in tmai n()doublelow,high,step,i,C,F;chara,b;scan f(%c%*c%*c%c,&a,&b);if(a=C

20、&b=F)sca nf(%lf%lf%lf,&low,&high,&step); prin tf( C -Fn);for(C=low;C%6.1fn,C,F);if(a=F&b=C)sca nf(%lf%lf%lf,&low,&high,&step); printf( F -Cn);for(F=low;F%6.1fn,F,C);return。;Problem E: 1!+2!+k!=?Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 4114 Solved: 1376Submit Status Web BoardDescriptio n求1!+2!+k!=

21、?,并判断是否溢出。In put输入为一个正整数k。Output若1!+2!+k!的值溢出unsigned (无符号整型)的范围输出“ overflow ”,否 则输出1!+2!+k!的结果。Sample In put5Sample Output153HINT如果一个值溢出某个变量的数据类型存储范围,但仍然存入该变量,那么存入 该变量中的值实际上是什么?Append Code这个题当年坑了多少人。00#i ncludein tma in() in tk,i,j,m,sum=O;scan f(%d,&k);if(k=13)pri ntf(overflow);elsefor(i=1;i=k;i+)

22、for(j=1,m=1;j0)prin tf(%d,sum);Problem F:十进制整数转二进制Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 3274 Solved: 1617Submit Status Web BoardDescriptio n给出一个十进制的非负整数x, x=216,把它转换成二进制数输出In put输入为多行,每行一个整数x,至读入EOF结束。Output每行输出x对应的二进制数值。Sample Input133365535Sample Output0111100001HINT本题有多种解法:可以用循环迭代对 2的除法和取余操

23、作,不过处理的顺序与输 出顺序相反,需要利用数组存储;用取对数或从大到小减去2的整数次幕的方法计算与输出顺序是相同的;也可以用printf()把十进制的数值处理成十六进制,然后1位十六进制转4位二进制;也可以用位运算处理。Append Code求2进制的方法至少要会一个,这个是逆序输出法#i ncludein tmai n()in ta100;in tb,i,j;while(sca nf(%d,&b)!=EOF)if(b=1)pri ntf(1n);elsefor(i=0;i+) ai=b%2;b=b/2;if(b=2)c ontinue;if(b=l)pri ntf(1);for(j=i;j

24、=0;j-)prin tf(%d,aj);prin tf(n);break;Problem C:数组去重Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1366 Solved: 764Submit Status Web BoardDescriptio n现有一个非减序排序的一维数组,其中有若干元素是重复的。编程将重复元素删除掉若干个,仅保留1个,使数组中没有重复元素。In put输入有多行。第一行MQ表示之后有M行输入。之后的M行输入是若干个一维数组。每行的第一个数据 ONv=1OO0表示该数组 有N个整数。其后是按照非减序排好的 N个整数,每个元素

25、均在int类型的表 示范围之内。每行的所有数据两两之间用一个空格隔开。Output输出有M行,每行输出与上述M组输入对应,是其输入数组去重后的结果。输出的数据需按照递增序排列,且每两个数组元素之间用一个空格隔开。Sample In put210 0 0 0 0 0 1 3 3 4 410 1 2 3 4 5 6 7 8 9 10Sample Output0 1 3 41 2 3 4 5 6 7 8 9 10Append Code这个也看看吧!我写的比较麻烦,有好的想法也可以传到群里#i ncludein tmai n()in tN, n,i,j,k,t;in ta2000=-1;scan f(

26、%d,&N);for(i=1;i=N;i+)a0=-1;sea nf(%d,&n);for(j=1;j=n ;j+)sea nf(%d,&k);ak=k;if(a0=0)prin tf(0);for(j=1;jv=1005;j+)if(aj!=0)printf( %d,aj);if(a0!=0)for(j=1;j=1005;j+)if(aj!=0) pri ntf(%d,aj);break;for(t=j+1;t=1005;t+)if(at!=0)printf( %d,at);prin tf(n);for(j=0;jv=1005;j+)aj=0;Problem F: Matrix Proble

27、m (III) : Array PracticeTime Limit: 1 Sec Memory Limit: 4 MBSubmit: 2158 Solved: 581Submit Status Web BoardDescriptio n求两个矩阵A、B的乘积C=AB根据矩阵乘法的定义,只有 A的列数和B的行数 相同才能相乘。可以确保所有运算结果都在int类型的范围之内。In put输入数据为多个矩阵(最少2个),每个矩阵以两个正整数 m和n开始,满足 0m,*=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示 输入数据结束。Output对输入的矩阵两两相乘:第1个和第2个相乘、第1个和第2个相乘的结果和第3个 相乘按顺序输出矩阵相乘的结果:每行两个元素之间用一个空格分开,每 行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。若前k个矩阵相乘的结果和第k+1个矩阵无法相乘(即不满足矩阵乘法定义),贝U输出“ Not satisfied the defi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论