北京理工大学级C程序设计非信息类答案part2.docx
- 文档编号:25067631
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:83
- 大小:68.17KB
北京理工大学级C程序设计非信息类答案part2.docx
《北京理工大学级C程序设计非信息类答案part2.docx》由会员分享,可在线阅读,更多相关《北京理工大学级C程序设计非信息类答案part2.docx(83页珍藏版)》请在冰豆网上搜索。
北京理工大学级C程序设计非信息类答案part2
北京理工大学2013级C程序设计非信息类答案part2
49.【小学递归】杀鸡用牛刀——要用递归啊!
成绩
5
开启时间
2014年05月10日星期六14:
00
折扣
0.8
折扣时间
2014年05月24日星期六23:
55
允许迟交
否
关闭时间
2014年06月1日星期日23:
55
背景:
哈哈!
我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!
来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。
功能:
求整数n到m区间的累加和,其中n<=m。
输入:
区间的起始点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
1.int sum(int m,int n)
2.{if(m==n) return m;int i;for(i=n;i>=m;i--) return i+sum(m,i-1);}
3.#include
4.int main(){int m,n,s=0;scanf("%d%d",&m,&n);s=sum(m,n);
5.printf("The sum from %d to %d is %d.\n",m,n,s);return 0;}
50.【中学】求最大公约数——递归
成绩
5
开启时间
2014年05月10日星期六14:
00
折扣
0.8
折扣时间
2014年05月24日星期六23:
55
允许迟交
否
关闭时间
2014年06月1日星期日23:
55
请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。
=m 当m<=n且nmodm=0
GCD(N,M)=GCD(m,n) 当n =GCD(m,nmodm) 其他 输入: n和m输出: n和m的最大公约数 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 1.24 48↵ 1.24↵ 1秒 64M 0 测试用例2 1.13 15↵ 1.1↵ 1秒 64M 0 1.#include 2.int f(int x,int y) 3.{int s,t;t=x%y; 4.if(t==0) s=y;else s=f(y,t); 5.return s;} 6.int main() 7.{int m,n;scanf("%d%d",&m,&n); 8.printf("%d\n",f(m,n));return 0;} 51.【数列递归】求序列之和——递归 成绩 5 开启时间 2014年05月10日星期六14: 00 折扣 0.8 折扣时间 2014年05月24日星期六23: 55 允许迟交 否 关闭时间 2014年06月1日星期日23: 55 请使用递归算法求序列1+1/2-1/3+1/4 -1/5......的前n项之和。 输入: n输出: 序列的前n项和(精确到小数点之后第6位) 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 1.1↵ 1.1↵ 1秒 64M 0 测试用例2 1.2↵ 1.1.500000↵ 1秒 64M 0 测试用例3 1.3↵ 1.1.166667↵ 1秒 64M 0 1.#include 2.float sum(int n) 3.{float s;if(n==1) s=1.0; 4.else if(n%2==0) s=sum(n-1)+1.0/n; 5.else s=sum(n-1)-1.0/n;return s;} 6.int main() 7.{int n;float s;scanf("%d",&n); 8.if(n==1) printf("1\n"); 9.else {s=sum(n);printf("%.6f\n",s);}} 52.【大学】函数递归* 成绩 5 开启时间 2014年05月10日星期六14: 00 折扣 0.8 折扣时间 2014年05月24日星期六23: 55 允许迟交 否 关闭时间 2014年06月1日星期日23: 55 编写一个函数,使用递归算法求满足下述定义的整数序列的第n项。 1 当n>=0且n<=4时 f(n)= f(n-1)+f(n-3) 当n>4且n为偶数时 f(n-2)+f(n-4) 当n>4且n为奇数时 -1 其他 函数原型如下: intfindf(intn);参数说明: n项数;返回值是第n项值。 例如输入: 10,输出: 8 预设代码 前置代码 1./* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ 2.#include 3.int main() 4.{ int n,s, findf( int ); 5. scanf("%d", &n); 6. s = findf(n); 7. printf("%d\n", s); 8. return 0; 9.} 10./* PRESET CODE END - NEVER TOUCH CODE ABOVE */ 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 1.10↵ 1.8↵ 1秒 64M 0 1.int findf(int n) 2.{if(n>=0&&n<=4) return 1;if(n<0) return -1; 3.if(n>4&&n%2==0) return findf(n-1)+findf(n-3); 4.if(n>4&&n%2==1) return findf(n-2)+findf(n-4);} 53.【大学递归】求解平方根 成绩 5 开启时间 2014年05月10日星期六11: 35 折扣 0.8 折扣时间 2014年05月24日星期六11: 35 允许迟交 否 关闭时间 2014年06月1日星期日11: 35 小明上了大学,学习了用求解平方根的迭代公式。 其中: p为x的近似平方根,e是结果允许的误差。 输入: x,e输出: p 保留小数点后8位。 1.#include 2.#include 3.float f(float x,float p,float e) 4. {if(fabs(p*p-x) 5.int main() {float p,e,x;scanf("%f%f",&x,&e); p=f(x,x,e);printf("%.8f\n",p);return 0;} H12: 安全的密码(选做) 成绩 5 开启时间 2014年05月10日星期六14: 00 折扣 0.8 折扣时间 2014年05月24日星期六23: 55 允许迟交 否 关闭时间 2014年06月1日星期日23: 55 随着电子设备的广泛运用,密码也渐渐融入每个人的生活。 保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。 一个安全的密码,最好由大小写字母、数字或符号组成。 包含越多种类的字符,其安全性就越高。 同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。 并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。 任务林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。 现在他向你求助,请你帮忙设计一个程序来解决这个问题。 应当按照以下的规则来判断密码是否安全: 如果密码长度小于6位,则不安全;如果组成密码的字符只有一类,则不安全;如果组成密码的字符有两类,则为中度安全;如果组成密码的字符有三类或以上,则为安全 通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。 输入输入的第一行是一个整数N,表明后面有多少组密码。 随后的N行输入包括N个密码,每个密码的长度均小于20个字符。 输出针对每一个密码判断并输出它是否安全。 对于不安全的密码输出"NotSafe",对于中度安全的密码输出"MediumSafe",对于安全的密码输出"Safe" 输入样例 4 1234 abcdef ABC123 1#c3Gh 输出样例 NotSafe NotSafe Medium SafeSafe 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 1.10↵ 2.abcDEF↵ 3.ABC↵ 4.qw↵ 5.`↵ 6.ABCDEFGHIJKLMNOPQRST↵ 7.12345678901234567890↵ 8. 1aB↵ 9.1 B↵ 10.a X ↵ 11.qwe123%^&ABC↵ 1.Medium Safe↵ 2.Not Safe↵ 3.Not Safe↵ 4.Not Safe↵ 5.Not Safe↵ 6.Not Safe↵ 7.Safe↵ 8.Not Safe↵ 9.Safe↵ 10.Safe↵ 1秒 64M 0 1.#include 2.#include 3.int main(void) 4.{int n,i,j,x,m,b[4];char a[100];scanf("%d",&n); 5.for (i=1;i<=n;i++){gets(a);if (i==1) gets(a);x=strlen(a); 6.if (x<6) {printf("Not Safe\n");continue;} 7.b[0]=0;b[1]=0;b[2]=0;b[3]=0;for (j=0;j<=x-1;j++) 8.{if (48<=a[j]&&a[j]<=57) b[0]=1; 9. else if (65<=a[j]&&a[j]<=91) b[1]=1; 10.else if (97<=a[j]&&a[j]<=123) b[2]=1; 11.else b[3]=1; 12.if (a[0]+a[1]+a[2]+a[3]==4) break;}m=b[0]+b[1]+b[2]+b[3]; 13.switch (m) 14.{case 1: printf("Not Safe\n");break;case 2: printf("Medium Safe\n");break; 15.case 3: printf("Safe\n");break;case 4: printf("Safe\n");}}return 0;} H13: 编码问题(选作) 成绩 5 开启时间 2014年05月10日星期六14: 00 折扣 0.8 折扣时间 2014年05月24日星期六23: 55 允许迟交 否 关闭时间 2014年06月1日星期日23: 55 设有一个整形数组A[0..N-1];存放的元素为0~N-1(1 例如,当N=6时,有: A=(4,3,0,5,1,2)。 此时,数组A的编码定义如下: A[0]编码为0;A[i]编码为: 在A[0],A[1],…,A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1) 例如上面数组A的编码为: B=(0,0,0,3,1,2) 若给出数组A,则可求出其编码。 同理,若给出数组A的编码,可求出A中的原数据。 输入: 推导方向(取值为1或2,如为1,则表示根据数组求数组编码;如为2,则表示根据编码反求数组) 数组个数 数组或数组编码元素 输出: 数组编码、或数组本身(元素之间以空格分隔) 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 1.1↵ 2.6↵ 3.4 3 0 5 1 2↵ 1.0 0 0 3 1 2↵ 1秒 64M 0 测试用例2 1.1↵ 2.8↵ 3.1 0 3 2 5 6 7 4↵ 1.0 0 2 2 4 5 6 4↵ 1秒 64M 0 测试用例4 1.2↵ 2.6↵ 3.0 0 2 3 1 3↵ 1.2 0 4 5 1 3↵ 1秒 64M 0 1.#include 2.int main() {int mode,n,i,j,s,a[100],b[100]; static int c[100]; 3.scanf("%d",&mode);scanf("%d",&n);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京理工大学 程序设计 信息 答案 part2