C语言作业5(24页).doc

上传人:1595****071 文档编号:35415128 上传时间:2022-08-21 格式:DOC 页数:24 大小:401KB
返回 下载 相关 举报
C语言作业5(24页).doc_第1页
第1页 / 共24页
C语言作业5(24页).doc_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《C语言作业5(24页).doc》由会员分享,可在线阅读,更多相关《C语言作业5(24页).doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-C语言作业5-第 24 页28 组成最大数任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。输入: 自然数 n 输出: 各位数字组成的最大数 测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 1593以文本方式显示 1. 95311秒 64M 0 #include#includeint main()char a10000;int x10=0;scanf(%s,a);int n=strlen(a);for(int i=0;i=0;i-)for(int j=0;jxi;j+)printf(%d,i);printf(n)

2、;29 北理工的恶龙背景:最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花 最少的学分数 杀死恶龙,于是找到你寻求帮助。输入:第一行 龙头数 n , 勇士人数 m ( 1=n, m=100 ) 接下来 n 行,每行包含一个整数,表示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l输出:如果勇

3、士们能完成任务,输出校长需要花的最小费用;否则输 出 “ bit is doomed! ” 测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 23 2. 5 3. 4 4. 7 5. 8 6. 4以文本方式显示 1. 111秒 64M 0 测试用例 2以文本方式显示 1. 21 2. 5 3. 5 4. 10以文本方式显示 1. bitisdoomed!1秒 64M 0 #includeint main()int dragon,hero;scanf(%d%d,&dragon,&hero);int dragonhead100=0;int herohight100=0;/

4、inputfor(int i=0;idragon;i+)scanf(%d,&dragonheadi);for(int i=0;ihero;i+)scanf(%d,&herohighti);/make the date in orderint temp;for(int i=0;idragon;i+)for(int j=0;jdragonheadj+1)temp=dragonheadj;dragonheadj=dragonheadj+1;dragonheadj+1=temp;for(int i=0;ihero;i+)for(int j=0;jherohightj+1)temp=herohightj

5、;herohightj=herohightj+1;herohightj+1=temp;/arrange hero to kill the dragonint start=0;for(int i=0;idragon;i+)for(int j=start;j=dragonheadi)dragonheadi=0;start+;break;elseherohightj=0;start+;if (starthero)break;for(int i=start;ihero;i+)herohighti=0;/caculate the gradeint sd=0;int sh=0;for(int i=0;id

6、ragon;i+)sd=sd+dragonheadi;for(int i=0;ihero;i+)sh=sh+herohighti;if(sd=0)printf(%dn,sh);elseprintf(bit is doomed!n);31 合并字符串输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到 大排列。输入: 两个已经排好顺序(升序)的两个字符串输出: 一个合并在一起的有序(升序)的字符串要求: 设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。 如果采用先进行串连接,然后再进行排序的算法,则效率太低了。测试输入期待的输出时间限制

7、内存限制额外进程测试用例 1以文本方式显示 1. abcdef 2. bcefghi以文本方式显示 1. abbccdeeffghi1秒 64M 0 测试用例 2以文本方式显示 1. 123456 2. 789以文本方式显示 1. 1234567891秒 64M 0 测试用例 3以文本方式显示 1. 789 2. 12345以文本方式显示 1. 123457891秒 64M 0 测试用例 4以文本方式显示 1. 123456 2. 123456以文本方式显示 1. 1秒 64M 0 测试用例 5以文本方式显示 1. 123456 2. 以文本方式显示 1. 1234561秒 64M 0 测试用

8、例 6以文本方式显示 1. 2. 123456以文本方式显示 1. 1234561秒 64M 0 #includeint main()char a50,b50;gets(a);gets(b);char *p1;p1=&a0;char *p2;p2=&b0;for(;1;)if(*p1=0)printf(%s,p2);break;if(*p2=0)printf(%s,p1);break;if(*p1*p2)printf(%c,*p2);p2+;elseprintf(%c,*p1);p1+;printf(n);32 串的减法输入字符串s和t(串长不超过80个字符),将在字符串s中出现,但未在字符串

9、t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。 例如:当s=112345,t=2467时,u=1135。输入:第一行为串s第二行为串t输出: 串u测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 112345 2. 2467以文本方式显示 1. 11351秒 64M 0 #include#includeint main()char a80;char b80;gets(a);gets(b);int l=strlen(a);for(int i=0;bi!=0;i+)for(int j=0;jl;j+)if(aj=bi)

10、aj=0;for(int k=0;kl;k+)if(ak!=0)printf(%c,ak);printf(n);H9:五年级小学生的题目(选做)那两个小朋友在不断进步,他们已经学会了负数和多位数,于是他们又开始进行游戏了。小明给出一堆整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。输入: 用逗号分隔的整数序列,及其运算符和等号输出: 最大数 op 最小数=结果说明:本题目应该可以不使用数组就可以完成,关键是如何处理负数和减法。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 1,10,

11、100,+,=以文本方式显示 1. 100+1=1011秒 64M 0 测试用例 2以文本方式显示 1. -100,-1,1,100,+,=以文本方式显示 1. 100+(-100)=01秒 64M 0 测试用例 3以文本方式显示 1. -20,-10,0,10,20,*,=以文本方式显示 1. 20*(-20)=-4001秒 64M 0 #include#includeint intpow(int a,int b)/abint result=1;for(int i=0;ib;i+)result=result*a;return result;struct dateint max;int min

12、;char op;int r;struct date function(char p,int n)struct date result;n=n-4;int max=-10000;int min=10000;int count=0;/need back to 0int x10=0;/need back to 0int temp=0;/need back to 0int sign=1;/need back to 1for(int i=0;i=n;i+)if (pi=,)/meet , means end caculate the value and compare with max and min

13、for(int k=0;kmax) max=temp;if(tempmin) min=temp;count=0;temp=0;sign=1;continue;if(pi=-)sign=-1;continue;elsexcount=pi-0;count+;char opp;opp=pn+1;if(opp=+) result.r=max+min;result.op=+; else if(opp=-) result.r=max-min;result.op=-; else if(opp=*) result.r=max*min;result.op=*; else if(opp=/) if(min=0)r

14、esult.r=0;elseresult.r=max/min;result.op=/; else if(opp=%) result.r=max%min;result.op=%;result.max=max;result.min=min;return result;int main()char w100;gets(w);int l=strlen(w);struct date cc=function(w,l);if(cc.op=/&cc.min=0)printf(Error!);else if(cc.max0)printf(%d),cc.max);elseprintf(%d,cc.max);pri

15、ntf( %c ,cc.op);if(cc.min0)printf(%d),cc.min);elseprintf(%d,cc.min);printf( = );printf(%d,cc.r);printf(n);H10:扫雷(选做)背景 你玩儿过扫雷游戏吧?有个操作系统中带了这个小游戏,那个系统叫什么来着?在游戏中要想过关,就必须要在一个 NxM 的区域上找出所有的地雷。游戏过程中,计算机会在地图上显示一些数字从而帮助你确定哪里有地雷。例如,在下面这个有两颗地雷的 4x4 的地图(*表示地雷): 根据上面的地图,可以计算出应该提供给游戏者的数字如下所示: *10022101*101110 每个

16、数字表示了该方格周围到底有几个地雷,当然,一个方格周围最多的时候只会有八个。 输入 输入中将包括一系列的地图,每个地图的第一行有两个整数 n 和 m(0 n,m = 100),它们表示了地图的行数和列数。下面的 n 行每行都有 m 个字符,其中 . 表示安全而 * 表示地雷。如果地图的 n 和 m 都为 0,则表示输入结束。 输出 针对每一个地图,首先输出一行: Field #x:其中 x 是当前地图的编号(从 1 开始)。下面的 n 行则将地图中的 . 以数字表示,该数字表示该方格周围有多少颗地雷。 来源测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 44 2.

17、*. 3. . 4. .*. 5. . 6. 35 7. *. 8. . 9. .*. 10. 00以文本方式显示 1. Field#1: 2. *100 3. 2210 4. 1*10 5. 1110 6. 7. Field#2: 8. *100 9. 33200 10. 1*1001秒 64M 0 测试用例 2以文本方式显示 1. 33 2. . 3. . 4. . 5. 33 6. * 7. * 8. * 9. 00以文本方式显示 1. Field#1: 2. 000 3. 000 4. 000 5. 6. Field#2: 7. * 8. * 9. *1秒 64M 0 #include

18、void print(char* a,char* b,char *c,int n)int count=0;if(*b=*) printf(*);elseif(*a=*) count+;if(*(a+1)=*) count+;if(*(b+1)=*) count+;if(*(c+1)=*) count+;if(*c=*) count+;printf(%d,count);for(int i=1;in;i+)count=0;if(*(b+i)=*)printf(*);elseif(*(a+i-1)=*) count+;if(*(a+i)=*) count+;if(*(a+i+1)=*) count+

19、;if(*(b+i-1)=*) count+;if(*(b+i+1)=*) count+;if(*(c+i-1)=*) count+;if(*(c+i+1)=*) count+;if(*(c+i)=*) count+;printf(%d,count);printf(n);int main()int flagn=0;int n,r;char empty110;for(int i=0;i110;i+)emptyi=.;char a110,b110,c110;char *aa;aa=&a0;char *bb;bb=&b0;char *cc;cc=&c0;for(int i=1;1;i+)for(in

20、t j=0;j110;j+)/清空cj=emptyj;bj=emptyj;aj=emptyj;scanf(%d%d,&r,&n);char temp;temp=getchar();if(r!=0&n!=0&flagn=1)printf(n);if(r=0&n=0)break;flagn=1;if(r=1)gets(b);bn=.;printf(Field #%d:n,i);print(aa,bb,cc,n);elseprintf(Field #%d:n,i);gets(b);bn=.;for(int j=0;jr-1;j+)gets(c);cn=.;print(aa,bb,cc,n);/输出第

21、j行for(int k=0;kn;k+)/向上复制一行ak=bk;bk=ck;for(int j=0;jn;j+)cj=emptyj;print(aa,bb,cc,n);/输出最后一行H11:身份证的奥秘(选做)背景 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999公民身份号码中做了明确的规定。 GB11643-1999公民身份号码为GB11643-1989社会保障号码的修订版,其中指出将原标准名称社会保障号码更名为公民身份号码,另外GB11643-1999公民身份号码从实施之日起代替GB11643-1989。GB11643-1999公民身份号码主要内容如

22、下: 一、范围 该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。 二、编码对象 公民身份号码的编码对象是具有中华人民共和国国籍的公民。 三、号码的结构和表示形式 1、号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 2、地址码 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。 3、出生日期码 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。 4

23、、顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。 5、校验码 (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, . , 16 ,先对前17位数字的权求和 Ai: 表示第i位置上的身份证号码数字值 Wi: 表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (2)计算模 Y = mod(S, 11) (3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3

24、2 四、举例如下: 15位的身份证号升级办法: 15位的身份证号:dddddd yymmdd xx p 18位的身份证号:dddddd yyyymmdd xx p y 其中dddddd为地址码(省地县三级) yyyymmdd yymmdd 为出生年月日 xx顺号类编码 p性别 15 位的 yy 年升为 18 位后,变成 19yy年,但对于百岁以上老人, 则为 18yy 年,此时,他们的最后三位顺序码为996, 997, 998 或 999 来标记。 输入 输入n组身份证号码,第一行为个数,以后每行为身份证号码。 输出 如果输入的身份证号码为15位,则将其升级为18位后显示输出;否则判断其是否为

25、合法身份证号,并逐行输出。 测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 4 2. 3. 4. 5. 以文本方式显示 1. Invalid 2. Valid 3. 4. 1秒 64M 0 #include#includeint mod(int *p)int result;int sum;sum=*p*7+*(p+1)*9+*(p+2)*10+*(p+3)*5+*(p+4)*8+*(p+5)*4+*(p+6)*2+*(p+7)*1+*(p+8)*6+*(p+9)*3+*(p+10)*7+*(p+11)*9+*(p+12)*10+*(p+13)*5+*(p+14)*8

26、+*(p+15)*4+*(p+16)*2;result=sum%11;return result;int main()char input30;int id18=0;int choice=0;int n;char base11=1,0,X,9,8,7,6,5,4,3,2;int x11=1,0,10,9,8,7,6,5,4,3,2;int temp;scanf(%d,&n);temp=getchar();for(int i=0;in;i+)gets(input);if(strlen(input)=15)choice=1;else if(strlen(input)=18)choice=2;els

27、eprintf(Invalidn);continue;switch (choice)case 1:for(int k=0;k6;k+)idk=inputk-0;id6=1;id7=9;for(int k=8;k5)id7=8;id17=mod(id);for(int k=0;k17;k+)printf(%d,idk);printf(%c,baseid17);printf(n);break;case 2:int flag=0;for(int k=0;k17;k+)idk=inputk-0;for(int q=0;q9|idq12)flag=1;if(year%4!=0&month=2&day28

28、)flag=1;if(year%4=0&month=2&day29)flag=1;if(id8=8)flag=1;if(input17=X|input17=x)id17=2;else if(input17-09|input17-00)id17=-1;elseid17=xinput17-0;if(mod(id)=id17&flag=0)printf(Validn);elseprintf(Invalidn);break;H12:安全的密码(选做)随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。一个安全的密码,最好由大小写字母、数字或符号

29、组成。包含越多种类的字符,其安全性就越高。同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。任务林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。应当按照以下的规则来判断密码是否安全:1. 如果密码长度小于 6 位,则不安全 2. 如果组成密码的字符只有一类,则不安全 3. 如果组成密码的字符有两类,则为中度安全 4. 如果组成密码的字符有三类或以上

30、,则为安全 通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。输入输入的第一行是一个整数 N,表明后面有多少组密码。随后的 N 行输入包括 N 个密码,每个密码的长度均小于 20 个字符。输出针对每一个密码判断并输出它是否安全。对于不安全的密码输出 Not Safe,对于中度安全的密码输出 Medium Safe,对于安全的密码输出 Safe输入样例41234abcdefABC1231#c3Gh输出样例Not SafeNot SafeMediumSafe Safe测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 10 2. abcDEF 3. ABC

31、4. qw 5. 6. ABCDEFGHIJKLMNOPQRST 7. 8. 1aB 9. 1B 10. aX 11. qwe123%&ABC以文本方式显示 1. MediumSafe 2. NotSafe 3. NotSafe 4. NotSafe 5. NotSafe 6. NotSafe 7. Safe 8. NotSafe 9. Safe 10. Safe1秒 64M 0 #include#includeint judge(char *p,int n)int result=0;if(n6)result=1;elseint a4=0,0,0,0;for(int i=0;i=0)&(*(p

32、+i)=a)&(*(p+i)=A)&(*(p+i)=Z)a2=1;elsea3=1;result=a0+a1+a2+a3;return result;int main()char temp;char words21;int n=0;scanf(%d,&n);temp=getchar();for(int i=0;in;i+)for(int j=0;j21;j+)wordsj=0;gets(words);switch(judge(words,strlen(words)case 1:printf(Not Safen);break;case 2:printf(Medium Safen);break;c

33、ase 3:case 4:printf(Safen);break;H13:编码问题(选作) 设有一个整形数组 A0.N-1;存放的元素为 0N-1 (1N=10)之间的整数,且 AiAj(ij)。例如,当N=6时,有:A=(4,3,0,5,1,2)。此时,数组A的编码定义如下: A0编码为0; Ai编码为:在A0,A1,Ai-1中比Ai的值小的个数 (i=1,2,N-1) 例如上面数组 A的编码为:B=(0,0,0,3,1,2)若给出数组A,则可求出其编码。同理,若给出数组A的编码,可求出A中的原数据。输入: 推导方向(取值为1或2,如为1,则表示根据数组求数组编码;如为2,则表示根据编码反求

34、数组) 数组个数 数组或数组编码元素 输出: 数组编码、或数组本身(元素之间以空格分隔)测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 1 2. 6 3. 430512以文本方式显示 1. 0003121秒 64M 0 #includeint main()int choice;int n;scanf(%d%d,&choice,&n);int num10=0;int result10=0;for(int i=0;in;i+)scanf(%d,&numi);switch(choice)case 1:/数组求数组编码result0=0;int count=0;for(int i=1;in;i+)for(int j=0;ji;j+)if(numjnumi)count+;resulti=count;count=0;for(int i=0;i=0;i-)for(int j=0;1;j+)if(basej!=-1)c+;printf(n=%d i=%d j=%d c=%dn,n,i,j,c);for(int i=0;i10;i+)printf(%d ,basei);printf(n);for(int i=0;i10;i+)printf(%d ,resulti);printf(n);/system(pause);if(c-1)=numi)resulti=basej;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁