您好,欢迎访问三七文档
HomeWebBoardProblemSetStandingStatusStatisticsProblemQ:SequenceProblem(IV):FunctionPraticeTimeLimit:1SecMemoryLimit:4MBSubmit:193Solved:88[Submit][Status][WebBoard]Description整数序列是一串按特定顺序排列的整数,整数序列的长度是序列中整数的个数,不可定义长度为负数的整数序列。两整数序列A、B的和定义为一个新的整数序列C,序列C的长度是A、B两者中较长的一个,序列C的每个位置上的整数都是A、B对应位置之和。若序列A、B不等长,不妨假设A比B整数多,那么序列C中多出B的那部分整数视作A的对应位置上的整数与0相加。你的任务是计算符合某些要求的整数序列的和,这些序列中的整数都是小于1000的非负整数。--------------------------------------华丽的分割线--------------------------------------编写以下函数,使append.c中的main()函数能正确运行:原型:intmax(inta,intb);功能:返回a和b中较大的一个int值。原型:intinit_seq(intseq[],intsize);功能:把int数组seq[]中的前size个元素初始化为0。原型:intget_seq(intseq[]);功能:按输入格式的要求,读取size个元素存放在seq[],返回读到的元素个数。原型:intput_seq(intseq[],intsize);功能:按输出格式的要求,把seq[]中的前size个元素输出。原型:intadd_seq(intsum_seq[],intadd_seq[],intsize);功能:把sum_seq[]和add_seq[]中的前size个元素相加,结果存储sum_seq[]中。--------------------------------------华丽的分割线--------------------------------------append.c中的main()函数简述:1.定义两个数组odd_seq[]和even_seq[],分别存储奇数行输入的序列和偶数行输入序列,odd_size和even_size是输入的序列元素个数。2.输入总行数m;3.初始化odd_seq[]的全部元素,输入第一行序列,存入odd_seq[],元素个数存入odd_size;4.从第2行至第m行重复以下步骤:4.1要输入的是偶数行:even_seq[]全体清0,读even_seq[],把even_seq[]加到odd_seq[]上,输出odd_seq[];4.2要输入的是奇数行时与偶数行操作的变量相反,步骤一致;5.输出最后一行。Input输入的第一行为一个整数M(M0),后面有M行输入。每行第一个整数为N(N=1000),后接一个长度为N的整数序列。Output对输入的整数序列两两相加:第1行和第2行相加、第2行和第3行相加……按顺序输出结果:每行输出一个整数序列,每两个整数之间用一个空格分隔。若最后序列不足两个,则视作补一个长度为0的整数序列相加。值得注意的是一个长度为0的整数序列也应该有输出,即使没有整数输出,也应该占有一行,因为“每行输出一个整数序列”。SampleInput33123510152030504100200300400SampleOutput111723305011021532043050100200300400HINTappend.c中的全部内容作为程序的后半部分,会自动追加到你提交的程序后面,你需要编写的是这个程序的前半部分,OJ系统会把这两部分合并为一个完整的程序进行评测。因此,做题时:1.首先,将append.c里的全部内容拷贝出来,作为你程序最后一部分,在这部分之前编写程序并进行测试;2.提交,不要提交apeend.c里的内容,只提交你自己编写的那一部分程序;否则,你提交的程序会重复出现append.c里的内容,这样提交OJ测试的程序和你自己编写的程序是不一样的,往往会出现main()函数重复定义的编译错误。3.修改程序时,不要改动append.c里面的内容使你的整个程序运行正确,而是去修改你自己写的那一部分。AppendCodeappend.c,[Submit][Status][WebBoard]한국어中文یسرافEnglishไทยAllCopyrightReserved2010-2011SDUSTOJTEAMGPL2.02003-2011HUSTOJProjectTEAMAnythingabouttheProblems,PleaseContactAdmin:admin代码:#includestdio.h#defineMAX_SIZE1200intmax(inta,intb){if(ab)returna;elsereturnb;}intinit_seq(intseq[],intsize){inti;for(i=0;isize;i++)seq[i]=0;}intget_seq(intseq[]){inti,j,n;scanf(%d,&n);for(i=0;in;i++)scanf(%d,&seq[i]);returnn;}intput_seq(intseq[],intsize){inti,j;for(i=0;isize;i++){if(i==0)printf(%d,seq[i]);elseprintf(%d,seq[i]);}//printf(\n);if(size==0)printf(\n);}intadd_seq(intsum_seq[],intadd_seq[],intsize){inti,j,m;for(i=0;isize;i++){sum_seq[i]=sum_seq[i]+add_seq[i];}}intmain(){intodd_seq[MAX_SIZE],odd_size;inteven_seq[MAX_SIZE],even_size;intm,i,put_size;scanf(%d,&m);init_seq(odd_seq,MAX_SIZE);odd_size=get_seq(odd_seq);for(i=2;i=m;i++){if(i%2==0){init_seq(even_seq,MAX_SIZE);even_size=get_seq(even_seq);put_size=max(odd_size,even_size);add_seq(odd_seq,even_seq,put_size);put_seq(odd_seq,put_size);}else{init_seq(odd_seq,MAX_SIZE);odd_size=get_seq(odd_seq);put_size=max(odd_size,even_size);add_seq(even_seq,odd_seq,put_size);put_seq(even_seq,put_size);}}if(m%2==0)put_seq(even_seq,even_size);elseput_seq(odd_seq,odd_size);return0;}2.HomeWebBoardProblemSetStandingStatusStatisticsProblemP:编写函数gcd()和lcm()TimeLimit:1SecMemoryLimit:2MBSubmit:614Solved:219[Submit][Status][WebBoard]Description辗转相除法,也称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。两个整数的最大公约数(亦称公约数)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252=21×12;105=21×5);因为252−105=147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。例如,计算a=1071和b=462的最大公约数的过程如下:从1071中不断减去462直到小于462(可以减2次,即商q0=2),余数是147:1071=2×462+147.然后从462中不断减去147直到小于147(可以减3次,即q1=3),余数是21:462=3×147+21.再从147中不断减去21直到小于21(可以减7次,即q2=7),没有余数:147=7×21+0.此时,余数是0,所以1071和462的最大公约数是21。要求编写两个函数:1.求最大公约数的函数gcd()。gcd()的返回值是两个参数的最大公约数,函数原型如下:intgcd(int,int);2.求最小公倍数的函数lcm()。lcm()的返回值是两个参数的最小公倍数,函数原型如下:intlcm(int,int);main()函数见append.c。Input输入为多行,每行有一对非负整数a,b,且a*b不会超出int类型的数据范围。输入至EOF结束。Output每行输出一对a,b的最大公约数和最小公倍数,顺序与输入对应。从数论上的整除定义出发:若a整除b(b除以a没有余数),则b是a的倍数,a是b的约数,这里要求b不为0。因此0是任意整数的倍数,但是0不能是约数SampleInput1123223246751261892436SampleOutput111622162121356129181272HINTappend.c中的全部内容作为程序的后半部分,会自动追加到你提交的程序后面,你需要编写的是这个程序的前半部分,OJ系统会把这两部分合并为一个完整的程序进行评测。因此,做题时:1.首先,将append.c里的全部内容拷贝出来,作为你程序最后一部分,在这部分之前编写程序并进行测试;2.提交,不要提交apeend.c里的内容,只提交你自己编写的那一部分程序;否则,你提交的程序会重复出现append.c里的内容,这样提交OJ测试的程序和你自己编写的程序是不一样的,往往会出现main()函数重复定义的编译错误。3.修改程序时,不要改动append.c里面的内容使你的整个程序运行正确,而是去修改你自己写的那一部分。AppendCodeappend.c,[Submit][Status][WebBoard]한국어中文یسرافEnglishไทยAllCopyrightReserved2010-2011SDUSTOJTEAMGPL2.02003-2011HUSTOJProjectTEAMAnythingabouttheProblems,PleaseContactAdmin:admin#includestdio.hintgcd(intm,intn){inta,b,p;if(m=n){a=m;b=n;}else{a=n;b=m;}if(b==0){return(a);}if(a!=0&&b!=0){while(a%b!=0){p=a%b;a=b;b=p;}if(a%b==0)return(b);}}intlcm(intm,intn){inta,b,p;if(m=n){a=m;b=n;}else{a=n;b=m;}if(b==0){return(b);}if(a!=0&&b!=0){while(a%b!=0){p=a%b;a=b;b=p;}if(a%b==0)return(m/b*n);}}intmain(){inta,b;#ifndefONLINE_JUDGEfreopen(test.in,r,stdin);freope
本文标题:C语言OJ试题
链接地址:https://www.777doc.com/doc-2907784 .html