C语言作业5.docx
- 文档编号:26652938
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:40
- 大小:31.79KB
C语言作业5.docx
《C语言作业5.docx》由会员分享,可在线阅读,更多相关《C语言作业5.docx(40页珍藏版)》请在冰豆网上搜索。
C语言作业5
28组成最大数
成绩:
10/折扣:
0.8
任意输入一个自然数,输出该自然数的各位数字组成的最大数。
例如,输入1593,则输出为9531。
输入:
自然数n
输出:
各位数字组成的最大数
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.1593↵
以文本方式显示
1.9531↵
1秒
64M
0
#include
#include
intmain(){
chara[10000];
intx[10]={0};
scanf("%s",a);
intn=strlen(a);
for(inti=0;i for(inti=9;i>=0;i--) for(intj=0;j printf("\n"); } 29北理工的恶龙 成绩: 10/折扣: 0.8 背景: 最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只恶龙。 要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。 而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。 校长想花最少的学分数杀死恶龙,于是找到你寻求帮助。 输入: 第一行龙头数n,勇士人数m(1<=n,m<=100)接下来n行,每行包含一个整数,表示龙头的直径接下来m行,每行包含一个整数,表示勇士的身高l 输出: 如果勇士们能完成任务,输出校长需要花的最小费用;否则输出“bitisdoomed! ” 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.2 3↵ 2.5↵ 3.4↵ 4.7↵ 5.8↵ 6.4↵ 以文本方式显示 1.11↵ 1秒 64M 0 测试用例2 以文本方式显示 1.2 1↵ 2.5↵ 3.5↵ 4.10↵ 以文本方式显示 1.bit is doomed! ↵ 1秒 64M 0 #include intmain() { intdragon,hero; scanf("%d%d",&dragon,&hero); intdragonhead[100]={0}; intherohight[100]={0}; //input for(inti=0;i scanf("%d",&dragonhead[i]); for(inti=0;i scanf("%d",&herohight[i]); //makethedateinorder inttemp; for(inti=0;i { for(intj=0;j { if(dragonhead[j]>dragonhead[j+1]) { temp=dragonhead[j]; dragonhead[j]=dragonhead[j+1]; dragonhead[j+1]=temp; } } } for(inti=0;i { for(intj=0;j { if(herohight[j]>herohight[j+1]) { temp=herohight[j]; herohight[j]=herohight[j+1]; herohight[j+1]=temp; } } } //arrangeherotokillthedragon intstart=0; for(inti=0;i { for(intj=start;j { if(herohight[j]>=dragonhead[i]) { dragonhead[i]=0; start++; break; } else { herohight[j]=0; start++; } } if(start>hero) break; } for(inti=start;i herohight[i]=0; //caculatethegrade intsd=0; intsh=0; for(inti=0;i sd=sd+dragonhead[i]; for(inti=0;i sh=sh+herohight[i]; if(sd==0) printf("%d\n",sh); else printf("bitisdoomed! \n"); } 31合并字符串 成绩: 10/折扣: 0.8 输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。 输入: 两个已经排好顺序(升序)的两个字符串 输出: 一个合并在一起的有序(升序)的字符串 要求: 设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。 如果采用先进行串连接,然后再进行排序的算法,则效率太低了。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.abcdef↵ 2.bcefghi↵ 以文本方式显示 1.abbccdeeffghi↵ 1秒 64M 0 测试用例2 以文本方式显示 1.123456↵ 2.789↵ 以文本方式显示 1.9↵ 1秒 64M 0 测试用例3 以文本方式显示 1.789↵ 2.12345↵ 以文本方式显示 1.↵ 1秒 64M 0 测试用例4 以文本方式显示 1.123456↵ 2.123456↵ 以文本方式显示 1.1↵ 1秒 64M 0 测试用例5 以文本方式显示 1.123456↵ 2.↵ 以文本方式显示 1.123456↵ 1秒 64M 0 测试用例6 以文本方式显示 1.↵ 2.123456↵ 以文本方式显示 1.123456↵ 1秒 64M 0 #include intmain() { chara[50],b[50]; gets(a); gets(b); char*p1; p1=&a[0]; char*p2; p2=&b[0]; for(;1;) { if(*p1=='\0') { printf("%s",p2); break; } if(*p2=='\0') { printf("%s",p1); break; } if(*p1>*p2) { printf("%c",*p2); p2++; } else { printf("%c",*p1); p1++; } } printf("\n"); } 32串的减法 成绩: 10/折扣: 0.8 输入字符串s和t(串长不超过80个字符),将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。 例如: 当s="112345",t="2467"时,u="1135"。 输入: 第一行为串s 第二行为串t 输出: 串u 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.112345↵ 2.2467↵ 以文本方式显示 1.1135↵ 1秒 64M 0 #include #include intmain() { chara[80]; charb[80]; gets(a); gets(b); intl=strlen(a); for(inti=0;b[i]! ='\0';i++) { for(intj=0;j if(a[j]==b[i]) a[j]='\0'; } for(intk=0;k if(a[k]! ='\0') printf("%c",a[k]); printf("\n"); } H9: 五年级小学生的题目(选做) 成绩: 5/折扣: 0.8 那两个小朋友在不断进步,他们已经学会了负数和多位数,于是他们又开始进行游戏了。 小明给出一堆整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。 输入: 用逗号分隔的整数序列,及其运算符和等号 输出: 最大数op最小数=结果 说明: 本题目应该可以不使用数组就可以完成,关键是如何处理负数和减法。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.1,10,100,+,=↵ 以文本方式显示 1.100 + 1 = 101↵ 1秒 64M 0 测试用例2 以文本方式显示 1.-100,-1,1,100,+,=↵ 以文本方式显示 1.100 + (-100) = 0↵ 1秒 64M 0 测试用例3 以文本方式显示 1.-20,-10,0,10,20,*,=↵ 以文本方式显示 1.20 * (-20) = -400↵ 1秒 64M 0 #include #include intintpow(inta,intb)//a^b { intresult=1; for(inti=0;i result=result*a; returnresult; } structdate { intmax; intmin; charop; intr; }; structdatefunction(charp[],intn) { structdateresult; n=n-4; intmax=-10000; intmin=10000; intcount=0;//needbackto0 intx[10]={0};//needbackto0 inttemp=0;//needbackto0 intsign=1;//needbackto1 for(inti=0;i<=n;i++) { if(p[i]==',')//meet,meansendcaculatethevalueandcomparewithmaxandmin { for(intk=0;k temp=temp+x[k]*intpow(10,count-1-k); temp=temp*sign; if(temp>max)max=temp; if(temp count=0;temp=0;sign=1; continue; } if(p[i]=='-') { sign=-1; continue; } else { x[count]=p[i]-'0'; count++; } } charopp; opp=p[n+1]; if(opp=='+') {result.r=max+min;result.op='+';} elseif(opp=='-') {result.r=max-min;result.op='-';} elseif(opp=='*') {result.r=max*min;result.op='*';} elseif(opp=='/') { if(min==0) result.r=0; else { result.r=max/min; } result.op='/'; } elseif(opp=='%') {result.r=max%min;result.op='%';} result.max=max; result.min=min; returnresult; } intmain() { charw[100]; gets(w); intl=strlen(w); structdatecc=function(w,l); if(cc.op=='/'&&cc.min==0) printf("Error! "); else { if(cc.max<0) printf("(%d)",cc.max); else printf("%d",cc.max); printf("%c",cc.op); if(cc.min<0) printf("(%d)",cc.min); else printf("%d",cc.min); printf("="); printf("%d",cc.r); printf("\n"); } } H10: 扫雷(选做) 成绩: 5/折扣: 0.8 背景 你玩儿过扫雷游戏吧? 有个操作系统中带了这个小游戏,那个系统叫什么来着? 在游戏中要想过关,就必须要在一个NxM的区域上找出所有的地雷。 游戏过程中,计算机会在地图上显示一些数字从而帮助你确定哪里有地雷。 例如,在下面这个有两颗地雷的4x4的地图(*表示地雷): *... .... .*.. .... 根据上面的地图,可以计算出应该提供给游戏者的数字如下所示: *100 2210 1*10 1110 每个数字表示了该方格周围到底有几个地雷,当然,一个方格周围最多的时候只会有八个。 输入 输入中将包括一系列的地图,每个地图的第一行有两个整数n和m(0 下面的n行每行都有m个字符,其中"."表示安全而"*"表示地雷。 如果地图的n和m都为0,则表示输入结束。 输出 针对每一个地图,首先输出一行: Field#x: 其中x是当前地图的编号(从1开始)。 下面的n行则将地图中的"."以数字表示,该数字表示该方格周围有多少颗地雷。 来源 /v101/10189.html 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.4 4↵ 2.*...↵ 3.....↵ 4..*..↵ 5.....↵ 6.3 5↵ 7.**...↵ 8......↵ 9..*...↵ 10.0 0↵ 以文本方式显示 1.Field #1: ↵ 2.*100↵ 3.2210↵ 4.1*10↵ 5.1110↵ 6.↵ 7.Field #2: ↵ 8.**100↵ 9.33200↵ 10.1*100↵ 1秒 64M 0 测试用例2 以文本方式显示 1.3 3↵ 2....↵ 3....↵ 4....↵ 5.3 3↵ 6.***↵ 7.***↵ 8.***↵ 9.0 0↵ 以文本方式显示 1.Field #1: ↵ 2.000↵ 3.000↵ 4.000↵ 5.↵ 6.Field #2: ↵ 7.***↵ 8.***↵ 9.***↵ 1秒 64M 0 #include voidprint(char*a,char*b,char*c,intn) { intcount=0; if(*b=='*')printf("*"); else { if(*a=='*')count++; if(*(a+1)=='*')count++; if(*(b+1)=='*')count++; if(*(c+1)=='*')count++; if(*c=='*')count++; printf("%d",count); } for(inti=1;i { count=0; if(*(b+i)=='*') printf("*"); else { if(*(a+i-1)=='*')count++; if(*(a+i)=='*')count++; if(*(a+i+1)=='*')count++; 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"); } intmain() { intflagn=0; intn,r; charempty[110]; for(inti=0;i<110;i++) empty[i]='.'; chara[110],b[110],c[110]; char*aa; aa=&a[0]; char*bb; bb=&b[0]; char*cc; cc=&c[0]; for(inti=1;1;i++) { for(intj=0;j<110;j++)//清空 { c[j]=empty[j]; b[j]=empty[j]; a[j]=empty[j]; } scanf("%d%d",&r,&n); chartemp; temp=getchar(); if(r! =0&&n! =0&&flagn==1) printf("\n"); if(r==0&&n==0) break; flagn=1; if(r==1) { gets(b); b[n]='.'; printf("Field#%d: \n",i); print(aa,bb,cc,n); } else { printf("Field#%d: \n",i); gets(b); b[n]='.'; for(intj=0;j { gets(c); c[n]='.'; print(aa,bb,cc,n);//输出第j行 for(intk=0;k { a[k]=b[k]; b[k]=c[k]; } } for(intj=0;j c[j]=empty[j]; print(aa,bb,cc,n);//输出最后一行 } } } H11: 身份证的奥秘(选做) 成绩: 5/折扣: 0.8 背景 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。 GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。 GB11643-1999《公民身份号码》主要内容如下: 一、范围 该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。 二、编码对象 公民身份号码的编码对象是具有中华人民共和国国籍的公民。 三、号码的结构和表示形式 1、号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。 排列顺序从左至右依次为: 六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 2、地址码 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。 3、出生日期码 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。 4、顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。 5、校验码 (1)十七位数字本体码加权求和公式 S=Sum(Ai*Wi),i=0,...,16,先对前17位数字的权求和 Ai: 表示第i位置上的身份证号码数字值 Wi: 表示第i位置上的加权因子 Wi: 7910584216379105842 (2)计算模 Y=mod(S,11) (3)通过模得到对应的校验码 Y: 012345678910 校验码: 10X98765432 四、举例如下: 北京市朝阳区: 广东
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 作业
![提示](https://static.bdocx.com/images/bang_tan.gif)