《6924编号北理C语言作业及答案2》由会员分享,可在线阅读,更多相关《6924编号北理C语言作业及答案2(29页珍藏版)》请在金锄头文库上搜索。
1、34 北理工的恶龙北理工的恶龙 成绩: 10 / 折扣: 0.8 背景:背景: 最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟, 于是, 校长下令召集全校所有勇士杀死这只恶龙。 要杀死这只龙, 必须把它所有的头都砍掉, 每个勇士只能砍一个龙头, 龙的每个头大小都不一样, 一个勇士只有在身高不小于不小于龙头的直 径的情况下才能砍下它。 而且勇士们要求, 砍下一个龙头必须得到和自己身高厘米数一样的 学分。校长想花 最少的学分数杀死恶龙,于是找到你寻求帮助。 输入:输入: 第一行 龙头数 n , 勇士人数 m ( 1=n, m=100 ) 接下来 n 行, 每行包含一
2、个整数, 表 示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l 输出:输出: 如果勇士们能完成任务,输出校长需要花的最小费用;否则输 出 “ bit is doomed! ” 测试输入测试输入期待的输出期待的输出时间限制时间限制内存限制内存限制额外进程额外进程 测试用例测试用例 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 void main(
3、) int s=0,t,i,j,m,n,a100,b100,c100; for(i=0;i=99;i+) ai=0,bi=0,ci=0; scanf(%d%d, for(i=0;i=m-1;i+) scanf(%d, for(i=0;in) printf(bit is doomed!n); else for(i=0;i=m-1;i+) for(j=i;jaj) t=ai,ai=aj,aj=t; for(i=0;i=n-1;i+) for(j=i;jbj) t=bi,bi=bj,bj=t; t=0; for(i=0;i=m-1;i+) for(j=0;j=n-1;j+) if(ai=bj) ct
4、=bj; t+; bj=0; break; if(tm) printf(bit is doomed!n); else for(i=0;i=t;i+) s=s+ci; printf(%dn,s); 35 杀鸡用牛刀杀鸡用牛刀要用递归啊!要用递归啊! 成绩: 5 / 折扣: 0.8 背景:背景: 哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题, 一个非常短的程序居然可以完成如此复杂的工作, 真是神奇啊!来吧, 让我们也动手编写一 个递归程序,当然,我们要编写的不可能太复杂。 功能:功能: 求整数 n 到 m 区间的累加和,其中 n=m。 输入:输入: 区间的起始点
5、 n 区间的终止点 m 输出:输出: 累加和 要求:要求: 使用递归算法完成。 如此简单的题目当然要有隐含的测试用例啦, 就 3 个, 看看谁能猜出来。 测试输入测试输入期待的输出期待的输出 时间限制时间限制 内存限制内存限制 额外进程额外进程 测试用例测试用例 1 以文本方式显 示 1.1 10 以文本方式显示 1.The sum from 1 to 10 is 55. 1 秒 64M 0 测试用例测试用例 2 以文本方式显 示 1.10 15 以文本方式显示 1.The sum from 10 to 15 is 75. 1 秒 64M 0 #include int sum(int m,in
6、t n) int i; if(n=m) i=n; else i=n+sum(m,n-1); return(i); void main() int m,n; scanf(%d%d, printf(The sum from %d to %d is %d.n,m,n,sum(m,n); H13:安全的密码(选做):安全的密码(选做) 成绩: 5 / 折扣: 0.8 随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐 私,更关系到个人的财产和安全。一个安全的密码,最好由大小写字母、数字或符号组成。 包含越多种类的字符,其安全性就越高。同时密码还需要有一定的长度,通常至少要
7、由六个 以上的字符组成。 并不是每个人都喜欢这样复杂的密码, 很多人在设置密码的时候, 喜欢使用自己的名字或者 生日,但这是很大的安全隐患。 任务任务 林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户 自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个 程序来解决这个问题。 应当按照以下的规则来判断密码是否安全: 1.如果密码长度小于 6 位,则不安全 2.如果组成密码的字符只有一类,则不安全 3.如果组成密码的字符有两类,则为中度安全 4.如果组成密码的字符有三类或以上,则为安全 通常,可以认为数字、大写字母、小写字母和其它符号为
8、四类不同的字符。 输入输入 输入的第一行是一个整数 N,表明后面有多少组密码。随后的 N 行输入包括 N 个密码, 每个密码的长度均小于 20 个字符。 输出输出 针对每一个密码判断并输出它是否安全。 对于不安全的密码输出 Not Safe, 对于中度安全 的密码输出 Medium Safe,对于安全的密码输出 Safe 输入样例输入样例 4 1234 abcdef ABC123 1#c3Gh 输出样例输出样例 Not Safe Not Safe Medium Safe Safe 测试输入测试输入期待的输出期待的输出 时间限 制 时间限 制 内存限 制 内存限 制 额外进 程 额外进 程 测试
9、用 例 测试用 例 1 以文本方式显示 1.10 2.abcDEF 3.ABC 4.qw 5. 6.ABCDEFGHIJKLMNOPQRST 7.12345678901234567890 8.1aB 9.1 B 10. a X 11. qwe123% strlength=strlen(s); int n4=0,0,0,0; int kind=0,i; if(strlength6) return n;/not safe else for(i=0;i=0 else n3+; for(i=0;i4;i+) if(ni!=0)kind+; if(kind=1) return n;/not safe i
10、f(kind=2) return m;/Medium Safe return s;/Safe void main() int N,i; char level; scanf(%dn, char str50; for(i=0;iN;i+) gets(str); level=check(str); switch(level) case n:printf(Not Safen); break; case m:printf(Medium Safen); break; case s:printf(Safen);break; H14:身份证的奥秘(选做):身份证的奥秘(选做) 成绩: 5 / 折扣: 0.8
11、背景背景 18 位身份证标准在国家质量技术监督局于 1999 年 7 月 1 日实施的 GB11643-1999公民 身份号码中做了明确的规定。 GB11643-1999公民身份号码为 GB11643-1989社 会保障号码的修订版,其中指出将原标准名称社会保障号码更名为公民身份号码,另 外 GB11643-1999公民身份号码从实施之日起代替 GB11643-1989。GB11643-1999 公民身份号码主要内容如下: 一、范围一、范围 该标准规定了公民身份号码的编码对象、 号码的结构和表现形式, 使每个编码对象获得一个 唯一的、不变的法定号码。 二、编码对象二、编码对象 公民身份号码的编
12、码对象是具有中华人民共和国国籍的公民。 三、号码的结构和表示形式三、号码的结构和表示形式 1、号码的结构、号码的结构 公民身份号码是特征组合码, 由十七位数字本体码和一位校验码组成。 排列顺序从左至右依 次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 2、地址码、地址码 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按 GB/T2260 的规定执行。 3、出生日期码、出生日期码 表示编码对象出生的年、月、日,按 GB/T7408 的规定执行,年、月、日代码之间不用分 隔符。 4、顺序码、顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人
13、编定的顺序号,顺序 码的奇数分配给男性,偶数分配给女性。 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 2 四、举例如下:四、举例如下: 北京市朝阳区:
14、11010519491231002X 广东省汕头市: 440524188001010014 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、以后每行为身份证号码。 输出输出 如果输入的身份证号码为 15 位,则将其升级为 18 位后显示输出;否则判断其是否为合法 身份证号,并逐行输出。 测试输入测试输入期待的输出期待的输出 时间 限制 时间 限制 内存限 制 内存限 制 额外 进程 额外 进程 测试 用例 测试 用例 1 以文本方式显示 1.4 2.350622197904130331 3.11010519491231002X 4.110105491231002 以文本方式显示 1.Invalid 2.Valid 3.11010519491231002X 4.110105184912319965 1 秒 64M 0 5.11010
16、5491231996 #include #include void shengji(char str) int n=strlen(str);/n=15 char newstr19; int i; for(i=0;i6;i+) newstri=stri;/前六位地址码(省地县三级) for(i=8;i17;i+)/newstr 中的到第位 newstri=stri-2; newstr6=1; char temp4; temp0=str12; temp1=str13; temp2=str14; temp3=0; if(strcmp(temp,996)=0|strcmp(temp,997)=0|strcmp(temp,99