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

下载本文档

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

文档简介

针对做过去的一些通过率低的题做了一个World,大家可以看看,不会的话可以问问我或者前面的同学,这些弄懂的话,考试把握也很大了Problem E: 一年中的第几天Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 1873 Solved: 645SubmitStatusWeb BoardDescription给出某个日期,判断这是当年的第几天,每年的1月1日是第1天,非闰年年份的12月31日是第365天。Input输入的第一个数为n,后接n个日期。日期用3个正整数按顺序表示年月日,中间用“-”连接。Output若输入的日期为错误,则输出“error 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这题除了一次一次的加,可以用更简便的方法哦#includeint main() int year,month,day; int i,sum; int M15=0,31,0,31,30,31,30,31,31,30,31,30,31; scanf(%d-%d-%d,&year,&month,&day); if(year%4=0&year%100!=0)|(year%400=0) M2=29; else M2=28; for(i=1,sum=0;imonth;i+) sum=sum+Mi; printf(%d,sum+day);Problem K: 学生成绩统计表Time Limit: 1 Sec Memory Limit: 16 MBSubmit: 629 Solved: 268SubmitStatusWeb BoardDescription在学校里经常见到的成绩表,表的每行是一个学生的成绩,每列是各个科目的成绩。如下表所示。你的任务是:输入这样的成绩表,统计出每个学生的总成绩和各个科目的平均成绩。如下表所示。Input第一行为两个整数m,n,0m=50、0n=10,表示有m个学生和n个成绩。后面有m+1行n+1列的一个表,表的第1行和第1列都是不含空白符的字符串,表的各列用若干空格分隔,表的各行用一个回车分隔。第1行的2n+1列是各个科目的名字。第2m+1行1列为学生姓名。第2行2列开始到第m+1行、n+1列为各学生的各科目成绩(浮点数)。Output输出为一张表,表的大小为m+2行、n+2列,其中前m+1行n+1列的数据与输入相同。表的最右侧一列为学生各科目成绩的总和,该列第1行的标题是“sum”。表的最下面一行为各科目的所有学生平均成绩,该行的第1列标题是“average”。表的第1列输出为8个字符左对齐,后面每列为5个字符右对齐,两列之间有2个空格。表的所有数据项(除第1行和第1列外)都输出为保留1位小数。表的每行用一个回车分隔,表的最右边一列的数据项后没有空格。请注意:表的最右下角那项没有定义,不输出!最后1行的输出至最右一个科目的平均分结束,该行最后有回车。Sample Input10 6name SCI TECH COM CS106 SE309 CS101Tom 88 77 66 55 44 33Jerry 50 100 60 100 50 100Zhang3 90 95.5 60 75 82 18Li4 38 45 62 29 74 85Wang5 88 75 63 36 99 33.3Zhao6 99 99 99.5 97.5 42 100Liu7 80 80 80.5 81.5 82.5 83Wang8 7 6 5 4 3 2Song9 10 20 30 40 50 60Ma10 74 79.5 73 71 70 77Sample Outputname SCI TECH COM CS106 SE309 CS101 sumTom 88.0 77.0 66.0 55.0 44.0 33.0 363.0Jerry 50.0 100.0 60.0 100.0 50.0 100.0 460.0Zhang3 90.0 95.5 60.0 75.0 82.0 18.0 420.5Li4 38.0 45.0 62.0 29.0 74.0 85.0 333.0Wang5 88.0 75.0 63.0 36.0 99.0 33.3 394.3Zhao6 99.0 99.0 99.5 97.5 42.0 100.0 537.0Liu7 80.0 80.0 80.5 81.5 82.5 83.0 487.5Wang8 7.0 6.0 5.0 4.0 3.0 2.0 27.0Song9 10.0 20.0 30.0 40.0 50.0 60.0 210.0Ma10 74.0 79.5 73.0 71.0 70.0 77.0 444.5average 62.4 67.7 59.9 58.9 59.6 59.1HINTAppend Code这题的会了的话,输出格式之类的问题应该没有问题了。这里的话,给一种最简便的方法吧,这题还可以使用结构体做,更加直观#include#include#includeintmain() intm,n; chara6060; charb6060; doublec6060; doublesum60; doubleaverage60,avsum60; inti,j,k,l; scanf(%d%d,&m,&n); for(i=0;i=n;i+) scanf(%s,ai); for(i=1;i=m;i+) scanf(%s,bi); for(j=1,sumi=0;j=n;j+) scanf(%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*avsumj/m; printf(%-8s ,a0); for(i=1;i=n;i+) printf(%5s ,ai); printf(%5s,sum); printf(n); for(i=1;i=m;i+) printf(%-8s ,bi); for(j=1;j=n;j+) printf(%5.1f ,cij); printf(%5.1f,sumi); printf(n); printf(%-8s ,average); for(i=1;in;i+) printf(%5.1f ,averagei); printf(%5.1f,averagen); Problem F: 编写函数:素数的判定 (Append Code)Time Limit: 3 Sec Memory Limit: 16 MBSubmit: 1728 Solved: 570SubmitStatusWeb BoardDescription一个正整数n是素数:除了1和n不能被其他数整除。1不是素数。-编写一个函数用于判定一个正整数是不是素数。用C语言实现:append.c中函数原型为int is_primer(int num);功能:若num为素数返回1,否则返回0。用C+实现:append.cc中函数原型为bool isPrimer(int num);功能:若num为素数返回true,否则返回false。函数的调用格式见“Append Code”。Input每行输入一个正整数n。n不会超出int类型数据范围。输入最多不超过20个正整数。Output若n为素数,输出“YES”,否则输出“NO”。Sample Input1234567892147483647Sample OutputNOYESYESNOYESNOYESNONOYESHINT如果你是按照从小到大的顺序选择除数去判定一个数,那么你超时的原因多半是用了太多不必要的除数。程序需要优化,减少循环的次数。Append Codeappend.c, append.cc,经典的素数判定注意判定的方法!#include#includeintis_primer(intnum);intis_primer(intnum) inti; if(num=1)return0; elseif(num=2) return1; elseif(num%2=0)return0; else for(i=2;isqrt(num) return1; intmain() intnum; while(scanf(%d, &num) != EOF) if(is_primer(num) puts(YES); else puts(NO); return0;Problem D: 只有一个二元运算符的表达式运算Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 4119 Solved: 1563SubmitStatusWeb BoardDescription编程序读入并计算只有一个二元运算符的表达式的值。用到的二元运算符有:“+”、“-”、“*”、“/”、“%”,与C语言的语法一致。Input每行输入一个表达式,格式为:二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。测试样例不存在除数为0的情况。输入以a和b为0,且用一个空格分开结束。Output每行对应输入的运算符为“+”、“-”、“*”、“/”、“%”,则计算a+b、a-b、a*b、a/b、a%b的值;否则输出“invalid op”。Sample Input33+58*92.21-617/39%30 0Sample Output3872invalid op-550HINT教材上有非常相似的例题可以参考。Append Code这个没什么说的,看看吧,练习判断的#includeintmain() inta,b; charc; for(;scanf(%d%c%d,&a,&c,&b);) if(a=0&c= &b=0)break; else if(c=+)printf(%dn,a+b); elseif(c=-)printf(%dn,a-b); elseif(c=*)printf(%dn,a*b); elseif(c=/)printf(%dn,a/b); elseif(c=%)printf(%dn,a%b); elseprintf(invalid opn); Problem D: 摄氏华氏温度转换表Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 5380 Solved: 1412SubmitStatusWeb BoardDescription已知华氏温度F,转换为摄氏温度C的公式为C=(F-32)*5/9。输出给定范围(从low到high)和步长(step)的摄氏华氏温度转换表Input第1行若为“C-F”表示输出:摄氏华氏温度转换表,若为“F-C”表示输出:华氏摄氏温度转换表。第2、3行为两个整数:high和low,其值在-100到200之间。第4行为step,step精确到小数点后1位。Output输出第一行为C和F,分别表示摄氏和华氏,与小数点对齐。若输出摄氏华氏温度转换表,则C在前、F在后;反之,则输出华氏摄氏温度转换表。从输出的第2行开始为从温度low到温度high(包括low和high)的转换表,温度输出精确到小数点后1位,表格被“-”分为两个宽度相同的部分,其它的测试样例也不会给出超出宽度的数据,格式详见sample。Sample InputC-F-10402.5Sample Output C - F-10.0 - 14.0 -7.5 - 18.5 -5.0 - 23.0 -2.5 - 27.5 0.0 - 32.0 2.5 - 36.5 5.0 - 41.0 7.5 - 45.5 10.0 - 50.0 12.5 - 54.5 15.0 - 59.0 17.5 - 63.5 20.0 - 68.0 22.5 - 72.5 25.0 - 77.0 27.5 - 81.5 30.0 - 86.0 32.5 - 90.5 35.0 - 95.0 37.5 - 99.5 40.0 - 104.0HINT输出格式可以通过sample分析出来,因为两栏的总宽度是固定的。一个隐藏的陷阱是step是浮点数,某些浮点数是无法精确存储的,因此经过一定量的计算后这个误差会影响到浮点数的相等性判断,需要加上精度控制。Append Code这个精度控制的,需要好好看看!作业做出来的人不多!#includeintmain() doublelow,high,step,i,C,F; chara,b; scanf(%c%*c%*c%c,&a,&b); if(a=C&b=F) scanf(%lf%lf%lf,&low,&high,&step); printf( C - Fn); for(C=low;C%6.1fn,C,F); if(a=F&b=C) scanf(%lf%lf%lf,&low,&high,&step); printf( F - Cn); for(F=low;F%6.1fn,F,C); return0; Problem E: 1!+2!+k!=?Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 4114 Solved: 1376SubmitStatusWeb BoardDescription求1!+2!+k!=?,并判断是否溢出。Input输入为一个正整数k。Output若1!+2!+k!的值溢出unsigned(无符号整型)的范围输出“overflow”,否则输出1!+2!+k!的结果。Sample Input5Sample Output153HINT如果一个值溢出某个变量的数据类型存储范围,但仍然存入该变量,那么存入该变量中的值实际上是什么?Append Code这个题当年坑了多少人。#includeintmain() intk,i,j,m,sum=0; scanf(%d,&k); if(k=13)printf(overflow); else for(i=1;i=k;i+) for(j=1,m=1;j0) printf(%d,sum); Problem F: 十进制整数转二进制Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 3274 Solved: 1617SubmitStatusWeb BoardDescription给出一个十进制的非负整数x,x=216,把它转换成二进制数输出。Input输入为多行,每行一个整数x,至读入EOF结束。Output每行输出x对应的二进制数值。Sample Input0133365535Sample Output01111000011111111111111111HINT本题有多种解法:可以用循环迭代对2的除法和取余操作,不过处理的顺序与输出顺序相反,需要利用数组存储;用取对数或从大到小减去2的整数次幂的方法计算与输出顺序是相同的;也可以用printf()把十进制的数值处理成十六进制,然后1位十六进制转4位二进制;也可以用位运算处理。Append Code求2进制的方法至少要会一个,这个是逆序输出法#includeintmain() inta100; intb,i,j; while(scanf(%d,&b)!=EOF) if(b=1)printf(1n); else for(i=0;i+) ai=b%2; b=b/2; if(b=2)continue; if(b=1)printf(1); for(j=i;j=0;j-) printf(%d,aj); printf(n); break; Problem C: 数组去重Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1366 Solved: 764SubmitStatusWeb BoardDescription现有一个非减序排序的一维数组,其中有若干元素是重复的。编程将重复元素删除掉若干个,仅保留1个,使数组中没有重复元素。Input输入有多行。第一行M0,表示之后有M行输入。之后的M行输入是若干个一维数组。每行的第一个数据0N=1000,表示该数组有N个整数。其后是按照非减序排好的N个整数,每个元素均在int类型的表示范围之内。每行的所有数据两两之间用一个空格隔开。Output输出有M行,每行输出与上述M组输入一一对应,是其输入数组去重后的结果。输出的数据需按照递增序排列,且每两个数组元素之间用一个空格隔开。Sample Input210 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 10HINTAppend Code这个也看看吧!我写的比较麻烦,有好的想法也可以传到群里#includeintmain() intN,n,i,j,k,t; inta2000=-1; scanf(%d,&N); for(i=1;i=N;i+) a0=-1; scanf(%d,&n); for(j=1;j=n;j+) scanf(%d,&k); ak=k; if(a0=0) printf(0); for(j=1;j=1005;j+) if(aj!=0) printf( %d,aj); if(a0!=0) for(j=1;j=1005;j+) if(aj!=0) printf(%d,aj);break; for(t=j+1;t=1005;t+) if(at!=0) printf( %d,at); printf(n); for(j=0;j=1005;j+) aj=0; Problem F: Matrix Problem (III) : Array PracticeTime Limit: 1 Sec Memory Limit: 4 MBSubmit: 2158 Solved: 581SubmitStatusWeb BoardDescription求两个矩阵A、B的乘积C=AB。根据矩阵乘法的定义,只有A的列数和B的行数相同才能相乘。可以确保所有运算结果都在int类型的范围之内。Input输入数据为多个矩阵(最少2个),每个矩阵以两个正整数m和n开始,满足0m,n=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示输入数据结束。Output对输入的矩阵两两相乘:第1个和第2个相乘、第1个和第2个相乘的结果和第3个相乘按顺序输出矩阵相乘的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。若前k个矩阵相乘的结果和第k+1个矩阵无法相乘(即不满足矩阵乘法定义),则输出“Not satisfied the definition of matrix multiplication!”。然后用第k+1个矩阵去和第k

温馨提示

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

评论

0/150

提交评论