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