ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:31.41KB ,
资源ID:29886487      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29886487.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OJ题作业10分析.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OJ题作业10分析.docx

1、OJ题作业10分析作业(10)1249Problem A: Sequence Problem (IV) : Function Practice (Append Code)Time Limit: 1 SecMemory Limit: 4 MBSubmit: 3398Solved: 1710SubmitStatusWeb BoardDescription整数序列是一串按特定顺序排列的整数,整数序列的长度是序列中整数的个数,不可定义长度为负数的整数序列。两整数序列A、B的和定义为一个新的整数序列C,序列C的长度是A、B两者中较长的一个,序列C的每个位置上的整数都是A、B对应位置之和。若序列A、B不等

2、长,不妨假设A比B整数多,那么序列C中多出B的那部分整数视作A的对应位置上的整数与0相加。你的任务是计算符合某些要求的整数序列的和,这些序列中的整数都是小于1000的非负整数。-编写以下函数,使append.c中的main()函数能正确运行:原型:int max(int a, int b);功能:返回a和b中较大的一个int值。原型:int init_seq(int seq, int size);功能:把int数组seq中的前size个元素初始化为0。原型:int get_seq(int seq);功能:按输入格式的要求,读取size个元素存放在seq,返回读到的元素个数。原型:int put

3、_seq(int seq, int size);功能:按输出格式的要求,把seq中的前size个元素输出。原型:int add_seq(int sum_seq, int add_seq, int size);功能:把sum_seq和add_seq中的前size个元素相加,结果存储sum_seq中。Input输入的第一行为一个整数M(M0),后面有M行输入。每行第一个整数为N(N=1000),后接一个长度为N的整数序列。Output对输入的整数序列两两相加:第1行和第2行相加、第2行和第3行相加按顺序输出结果:每行输出一个整数序列,每两个整数之间用一个空格分隔。若最后序列不足两个,则视作补一个长

4、度为0的整数序列相加。值得注意的是一个长度为0的整数序列也应该有输出,即使没有整数输出,也应该占有一行,因为“每行输出一个整数序列”。Sample Input33 1 2 35 10 15 20 30 504 100 200 300 400Sample Output11 17 23 30 50110 215 320 430 50100 200 300 400HINTappend.c中的main()函数简述:1. 定义两个数组odd_seq和even_seq,分别存储奇数行输入的序列和偶数行输入序列,odd_size和even_size是输入的序列元素个数。2. 输入总行数m;3. 初始化odd

5、_seq的全部元素,输入第一行序列,存入odd_seq,元素个数存入odd_size;4. 从第2行至第m行重复以下步骤: 4.1 要输入的是偶数行:even_seq全体清0,读even_seq,把even_seq加到odd_seq上,输出odd_seq; 4.2 要输入的是奇数行时与偶数行操作的变量相反,步骤一致;5. 输出最后一行。Append Codeappend.c, #include #define MAX_SIZE 10000 int max(int a, int b) if(ab) return b; else return a; int init_seq(int seq, in

6、t size) int i; for(i=0;isize;i+) seqi=0; int get_seq(int seq) int cnt=0,shit; scanf(%d,&shit); while (cntshit) scanf(%d,&seqcnt+); return shit; int put_seq(int seq, int size) int i; for (i=0;isize;i+) printf(%d,seqi); if (i!=size-1) putchar( ); else putchar(n); if (size=0) putchar(n); int add_seq(in

7、t sum_seq, int add_seq, int size) int i; for (i=0;isize;i+) sum_seqi+=add_seqi; int main() int odd_seqMAX_SIZE, odd_size; int even_seqMAX_SIZE, even_size; int m, i, put_size; scanf(%d, &m); init_seq(odd_seq, MAX_SIZE); odd_size = get_seq(odd_seq); for(i = 2; i 0),后面有M组输入数据。每组数据以两个正整数m和n开始,满足0m,n=100

8、,接下来为一个m行n列的矩阵A。Output输出为多组,每组输出A的转置矩阵AT。矩阵的输出为:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。每两组输出之间用一个空行分隔开。Sample Input13 31 2 34 5 67 8 9Sample Output1 4 72 5 83 6 9HINT二维数组存储矩阵。#include #include int main() int arr1102102,num, n, m, k, i, j; scanf(%d, &num); for(k = 0; k num; k+) scanf(%d%d, &n

9、, &m); for(i = 0; i n; i+) for(j = 0; j m; j+) scanf(%d,&arr1ji); for(i = 0; i m; i+) for(j = 0; j n-1; j+) printf(%d ,arr1ij); printf(%d,arr1ij); printf(n); printf(n); return 0; 1054Problem C: Matrix Problem (II) : Array PracticeTime Limit: 1 SecMemory Limit: 4 MBSubmit: 5651Solved: 2246SubmitStatu

10、sWeb BoardDescription求两个矩阵A、B的和。根据矩阵加法的定义,只有同阶的矩阵才能相加。可以确保所有运算结果都在int类型的范围之内。Input输入数据为多个矩阵,每个矩阵以两个正整数m和n开始,满足0m,n=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示输入数据结束Output对输入的矩阵两两相加:第1个和第2个相加、第3个和第4个相加按顺序输出矩阵相加的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。若输入的矩阵不为偶数个,最后剩余的矩阵不产生任何输出。不满足矩阵加法定义的数据输出“Not sati

11、sfied the definition of matrix addition!”每两组输出之间用一个空行分隔开。Sample Input3 31 2 34 5 67 8 93 39 8 76 5 43 2 13 31 1 11 1 11 1 12 22 22 21 100 0Sample Output10 10 1010 10 1010 10 10Not satisfied the definition of matrix addition!HINT矩阵的加法就是对应位置上的元素相加。#include #include #include int main() int arr1105105,a

12、rr2105105; int x,y; while(scanf(%d%d,&x,&y)!=EOF&x!=0&y!=0) int i,j,m, n; for(i=0;ix;i+) for(j=0;jy;j+) scanf(%d,&arr1ij); scanf(%d%d,&m,&n); for(i=0;im;i+) for(j=0;jn;j+) scanf(%d,&arr2ij); if(m=0&n=0) break; else if(m=x&n=y) for(i=0;ix;i+) for(j=0;jy;j+) if(!j) printf(%d,arr1ij+arr2ij); else print

13、f( %d,arr1ij+arr2ij); printf(n); printf(n); else printf(Not satisfied the definition of matrix addition!nn); 1055Problem D: Matrix Problem (III) : Array PracticeTime Limit: 1 SecMemory Limit: 4 MBSubmit: 5100Solved: 1617SubmitStatusWeb BoardDescription求两个矩阵A、B的乘积C=AB。根据矩阵乘法的定义,只有A的列数和B的行数相同才能相乘。可以确保

14、所有运算结果都在int类型的范围之内。Input输入数据为多个矩阵(最少2个),每个矩阵以两个正整数m和n开始,满足0m,n=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示输入数据结束。Output对输入的矩阵两两相乘:第1个和第2个相乘、第1个和第2个相乘的结果和第3个相乘按顺序输出矩阵相乘的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。若前k个矩阵相乘的结果和第k+1个矩阵无法相乘(即不满足矩阵乘法定义),则输出“Not satisfied the definition of matrix multiplicatio

15、n!”。然后用第k+1个矩阵去和第k+2个矩阵相乘。最后一个矩阵只做乘数。每两组输出之间用一个空行分隔开。Sample Input2 31 1 11 1 13 31 2 34 5 67 8 93 10000 0Sample Output12 15 1812 15 1800HINT矩阵的乘法就是一行乘以一列加起来做一个元素。#include #include int main() int i, j, k, l = 1, m, n, x , y, a101101, b101101, c101101; while(scanf(%d%d, &m, &n) != EOF) if(m = 0 & n =

16、0) break; else if(l % 2 = 1) x = m; y = n; for(i = 0; i m; i +) for(j = 0; j n; j +) scanf(%d, &aij); else if(l%2 = 0) for(i = 0; i m; i +) for(j = 0; j n; j +) scanf(%d, &bij); if(y = m) /memset(c,0,sizeof(c); for(i = 0; i x; i +) for(j = 0; j n; j +) cij = 0; for(k = 0; k y; k +) cij += aik*bkj; f

17、or(i = 0; i x; i +) for(j = 0; j n; j +) if(j = 0) printf(%d, cij); else printf( %d, cij); aij = cij; cij = 0; /memset(c,0,sizeof(c); printf(n); printf(n); y = n; l +; else printf(Not satisfied the definition of matrix multiplication!n); printf(n); for(i = 0; i m; i +) for(j = 0; j n; j +) aij = bij

18、; bij = 0; /memset(b,0,sizeof(b); l +; x = m; y = n; l +; 1298Problem E: 递归的辗转相除法Time Limit: 1 SecMemory Limit: 128 MBSubmit: 3219Solved: 1821SubmitStatusWeb BoardDescription辗转相除法,也称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的几何原本(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的九章算术。两个整数的最大公约数(亦称公约数)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理

19、:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。根据这个原理,不难得出用辗转相除法求最大公约数的递归定义:下面,给出两个正整数A和B,求他们的最大公约数(gcd(A,B))和最小公倍数(lcm(A,B))。-Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。被禁用的关键字:循环语句for、while,甚至包括分支语句的switch、case、goto、break。被禁用的头文件:math.h、stdlib.h。Input输入为两个整数A和B,满足0A,B215。Output输出两数,分别为gcd(A,B)和lcm(A,B),用一个空格分隔。Sample Input24 36Sample Output12 72#include int gcd(int a,int b) int min, x; if(a = b) return b; else if(a b) min = b; x = a - b;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1