您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北理C语言作业及答案2
34北理工的恶龙成绩:10/折扣:0.8背景:最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花最少的学分数杀死恶龙,于是找到你寻求帮助。输入:第一行龙头数n,勇士人数m(1=n,m=100)接下来n行,每行包含一个整数,表示龙头的直径接下来m行,每行包含一个整数,表示勇士的身高l输出:如果勇士们能完成任务,输出校长需要花的最小费用;否则输出“bitisdoomed!”测试输入期待的输出时间限制内存限制额外进程测试用例1以文本方式显示1.23↵2.5↵3.4↵4.7↵5.8↵6.4↵以文本方式显示1.11↵1秒64M0测试用例2以文本方式显示1.21↵2.5↵3.5↵4.10↵以文本方式显示1.bitisdoomed!↵1秒64M0#includestdio.hvoidmain(){ints=0,t,i,j,m,n,a[100],b[100],c[100];for(i=0;i=99;i++)a[i]=0,b[i]=0,c[i]=0;scanf(%d%d,&m,&n);for(i=0;i=m-1;i++)scanf(%d,&a[i]);for(i=0;i=n-1;i++)scanf(%d,&b[i]);if(mn)printf(bitisdoomed!\n);else{for(i=0;i=m-1;i++)for(j=i;j=m-1;j++){if(a[i]a[j]){t=a[i],a[i]=a[j],a[j]=t;}}for(i=0;i=n-1;i++)for(j=i;j=n-1;j++){if(b[i]b[j]){t=b[i],b[i]=b[j],b[j]=t;}}t=0;for(i=0;i=m-1;i++)for(j=0;j=n-1;j++)if(a[i]=b[j]){c[t]=b[j];t++;b[j]=0;break;}if(tm)printf(bitisdoomed!\n);else{for(i=0;i=t;i++)s=s+c[i];printf(%d\n,s);}}}35杀鸡用牛刀——要用递归啊!成绩:5/折扣:0.8背景:哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。功能:求整数n到m区间的累加和,其中n=m。输入:区间的起始点n区间的终止点m输出:累加和要求:使用递归算法完成。如此简单的题目当然要有隐含的测试用例啦,就3个,看看谁能猜出来。测试输入期待的输出时间限制内存限制额外进程测试用例1以文本方式显示1.110↵以文本方式显示1.Thesumfrom1to10is55.↵1秒64M0测试用例2以文本方式显示1.1015↵以文本方式显示1.Thesumfrom10to15is75.↵1秒64M0#includestdio.hintsum(intm,intn){inti;if(n==m)i=n;elsei=n+sum(m,n-1);return(i);}voidmain(){intm,n;scanf(%d%d,&m,&n);printf(Thesumfrom%dto%dis%d.\n,m,n,sum(m,n));}H13:安全的密码(选做)成绩:5/折扣:0.8随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。一个安全的密码,最好由大小写字母、数字或符号组成。包含越多种类的字符,其安全性就越高。同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。任务林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。应当按照以下的规则来判断密码是否安全:1.如果密码长度小于6位,则不安全2.如果组成密码的字符只有一类,则不安全3.如果组成密码的字符有两类,则为中度安全4.如果组成密码的字符有三类或以上,则为安全通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。输入输入的第一行是一个整数N,表明后面有多少组密码。随后的N行输入包括N个密码,每个密码的长度均小于20个字符。输出针对每一个密码判断并输出它是否安全。对于不安全的密码输出NotSafe,对于中度安全的密码输出MediumSafe,对于安全的密码输出Safe输入样例41234abcdefABC1231#c3Gh输出样例NotSafeNotSafeMediumSafeSafe测试输入期待的输出时间限制内存限制额外进程测试用例1以文本方式显示1.10↵2.abcDEF↵3.ABC↵4.qw↵5.`↵6.ABCDEFGHIJKLMNOPQRST↵7.12345678901234567890↵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.Safe↵1秒64M0#includestdio.h#includestring.hcharcheck(chars[]){intstrlength;strlength=strlen(s);intn[4]={0,0,0,0};intkind=0,i;if(strlength6)return'n';//notsafeelse{for(i=0;istrlength;i++){if(s[i]='0'&&s[i]='9')n[0]++;elseif(s[i]='A'&&s[i]='Z')n[1]++;elseif(s[i]='a'&&s[i]='z')n[2]++;elsen[3]++;}for(i=0;i4;i++)if(n[i]!=0)kind++;if(kind==1)return'n';//notsafeif(kind==2)return'm';//MediumSafereturn's';//Safe}}voidmain(){intN,i;charlevel;scanf(%d\n,&N);charstr[50];for(i=0;iN;i++){gets(str);level=check(str);switch(level){case'n':printf(NotSafe\n);break;case'm':printf(MediumSafe\n);break;case's':printf(Safe\n);break;}}}H14:身份证的奥秘(选做)成绩: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四、举例如下:北京市朝阳区:11010519491231002X广东省汕头市:44052418800101001415位的身份证号升级办法:15位的身份证号:ddddddyymmddxxp18位的身份证号:ddddddyyyymmddxxpy其中dddddd为地址码(省地县三级)yyyymmddyymmdd为出生年月日xx顺号类编码p性别15位的yy年升为18位后,变成19yy年,但对于百岁以上老人,则为18yy年,此时,他们的最后三位顺序码为996,997,998或999来标记。输入输入n组身份证号码,第一行为个数,以后每行为身份证号码。输出如果输入的身份证号码为15位,则将其升级为18位后显示输出;否则判断其是否为合法身份证号,并逐行输出。测试输入期待的输出时间限制内存限制额外进程测试以文本方式显示1.4↵以文本方式显示1.Invalid↵1秒64M0用例12.350622197904130331↵3.11010519491231002X↵4.110105491231002↵5.110105491231996↵2.Valid↵3.11010519491231002X↵4.110105184912319965↵#includestdio.h#includestring.hvoidshengji(charstr[]){intn=strlen(str);//n=15charnewstr[19];inti;for(i=0;i6;i++){newstr[i]=str[i];//前六位地址码(省地县三级)}for(i=8;i17;i++)//newstr中的到第位{newstr[i]=str[i-2];}newstr[6]='1';chartemp[4];temp[0]=str[12];temp[1]=str[13];temp[2]=str[14];temp[3]='\0';if(strcmp(temp,996)==0||strcmp(temp,997)==0||strcmp(temp,998)==0||strcmp(temp,999)==0){newstr[7]='8';}elsenewstr[7]='9';//下面是校检码,0的ascii码值是intWi[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//权重intS=0;for(i=0;i17;i++){S=S+Wi[i]*((int)(newstr[i])-48);}inty;y=S%11;switch(y){case0:newstr[17]='1';break;case1:newstr[17]='0';break;case2:newstr[17]='X';break;case3:newstr[17]='9';break;case10:newstr[17]='2';break;default:newstr[
本文标题:北理C语言作业及答案2
链接地址:https://www.777doc.com/doc-6989800 .html