OJ题作业(10)_第1页
OJ题作业(10)_第2页
OJ题作业(10)_第3页
OJ题作业(10)_第4页
OJ题作业(10)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、对应位置之和。若序列A、B不等长,不妨假设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,返回读到的

3、元素个数。原型:int put_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(M>0),后面有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是输入的序列元

5、素个数。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. 输出最后一行。Append Codeappend.c, #include <stdio.h>  #define MAX_SIZE 1

6、0000  int max(int a, int b)        if(a<b)  return b;      else return a;    int init_seq(int seq, int size)        int i;      for(i=0;i<size;i+)    

7、;      seqi=0;    int get_seq(int seq)        int cnt=0,shit;      scanf("%d",&shit);      while (cnt<shit)          s

8、canf("%d",&seqcnt+);      return shit;    int put_seq(int seq, int size)        int i;      for (i=0;i<size;i+)               &#

9、160;printf("%d",seqi);          if (i!=size-1)             putchar(' ');          else putchar('n');     

10、;       if (size=0)          putchar('n');    int add_seq(int sum_seq, int add_seq, int size)        int i;      for (i=0;i<size;i+)   

11、0;      sum_seqi+=add_seqi;          int main()     int  odd_seqMAX_SIZE,  odd_size;     int even_seqMAX_SIZE, even_size;     int m, i, put_size;   &#

12、160;   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) 

13、0;                    init_seq(even_seq, MAX_SIZE);             even_size = get_seq(even_seq);         &#

14、160;   put_size = max(odd_size, even_size);             add_seq(odd_seq, even_seq, put_size);             put_seq(odd_seq, put_size);      &

15、#160;           else                     init_seq(odd_seq, MAX_SIZE);             odd_size

16、 = get_seq(odd_seq);             put_size = max(odd_size, even_size);             add_seq(even_seq, odd_seq, put_size);           

17、  put_seq(even_seq, put_size);                   if(m % 2 = 0)         put_seq(even_seq, even_size);     else       

18、; put_seq(odd_seq, odd_size);     return 0; 1053Problem B: Matrix Problem : Array PracticeTime Limit: 1 Sec  Memory Limit: 4 MBSubmit: 7795  Solved: 2678SubmitStatusWeb BoardDescription求一个m×n阶矩阵A的转置矩阵AT。矩阵A的每个元素都在int类型的范围之内。Input输入的第一行为一个整数M(M>0),

19、后面有M组输入数据。每组数据以两个正整数m和n开始,满足0<m,n<=100,接下来为一个m行n列的矩阵A。Output输出为多组,每组输出A的转置矩阵AT。矩阵的输出为:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。每两组输出之间用一个空行分隔开。Sample Input13 31 2 34 5 67 8 9Sample Output1 4 72 5 83 6 9HINT二维数组存储矩阵。#include <stdio.h> #include <stdlib.h> int main()   

20、;  int arr1102102,num, n, m, k, i, j;     scanf("%d", &num);     for(k = 0; k < num; k+)              scanf("%d%d", &n, &m);      

21、   for(i = 0; i < n; i+)             for(j = 0; j < m; j+)                 scanf("%d",&arr1ji);      

22、;   for(i = 0; i < m; i+)                      for(j = 0; j < n-1; j+)                 printf("

23、;%d ",arr1ij);             printf("%d",arr1ij);             printf("n");               

24、60;  printf("n");          return 0; 1054Problem C: Matrix Problem (II) : Array PracticeTime Limit: 1 Sec  Memory Limit: 4 MBSubmit: 5651  Solved: 2246SubmitStatusWeb BoardDescription求两个矩阵A、B的和。根据矩阵加法的定义,只有同阶的矩阵才能相加。可以确保

25、所有运算结果都在int类型的范围之内。Input输入数据为多个矩阵,每个矩阵以两个正整数m和n开始,满足0<m,n<=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示输入数据结束Output对输入的矩阵两两相加:第1个和第2个相加、第3个和第4个相加按顺序输出矩阵相加的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。若输入的矩阵不为偶数个,最后剩余的矩阵不产生任何输出。不满足矩阵加法定义的数据输出“Not satisfied the definition of matrix addition!”每两组输出之间用一

26、个空行分隔开。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<stdio.h>  #include<string.h>  #include<stdlib.h>  int main()&#

27、160;       int arr1105105,arr2105105;      int x,y;      while(scanf("%d%d",&x,&y)!=EOF&&x!=0&&y!=0)                int i

28、,j,m, n;        for(i=0;i<x;i+)          for(j=0;j<y;j+)              scanf("%d",&arr1ij);       scanf(&q

29、uot;%d%d",&m,&n);        for(i=0;i<m;i+)          for(j=0;j<n;j+)              scanf("%d",&arr2ij);    

30、0;  if(m=0&&n=0)           break;       else if(m=x&&n=y)              for(i=0;i<x;i+)         &

31、#160;        for(j=0;j<y;j+)                          if(!j) printf("%d",arr1ij+arr2ij);       &#

32、160;       else printf(" %d",arr1ij+arr2ij);                      printf("n");             

33、; printf("n");              else printf("Not satisfied the definition of matrix addition!nn");           1055Problem D: Matrix Problem (III) : Array PracticeTime Limit: 1 Sec&

34、#160; Memory Limit: 4 MBSubmit: 5100  Solved: 1617SubmitStatusWeb BoardDescription求两个矩阵A、B的乘积C=AB。根据矩阵乘法的定义,只有A的列数和B的行数相同才能相乘。可以确保所有运算结果都在int类型的范围之内。Input输入数据为多个矩阵(最少2个),每个矩阵以两个正整数m和n开始,满足0<m,n<=100,接下来为一个m行n列的矩阵A。当输入的m和n均为0时,表示输入数据结束。Output对输入的矩阵两两相乘:第1个和第2个相乘、第1个和第2个相乘的结果和第3个相

35、乘按顺序输出矩阵相乘的结果:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。若前k个矩阵相乘的结果和第k+1个矩阵无法相乘(即不满足矩阵乘法定义),则输出“Not satisfied the definition of matrix multiplication!”。然后用第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矩阵的乘法就是

36、一行乘以一列加起来做一个元素。#include <stdio.h> #include <string.h> int main()     int i, j, k, l = 1, m, n, x , y, a101101, b101101, c101101;     while(scanf("%d%d", &m, &n) != EOF)            

37、  if(m = 0 && n = 0) break;         else if(l % 2 = 1)                      x = m;           

38、;  y = n;             for(i = 0; i < m; i +)                 for(j = 0; j < n; j +)           

39、      scanf("%d", &aij);                  else if(l%2 = 0)                     &#

40、160;for(i = 0; i < m; i +)                 for(j = 0; j < n; j +)                 scanf("%d", &bij);    &

41、#160;        if(y = m)                               /memset(c,0,sizeof(c);       

42、60;          for(i = 0; i < x; i +)                     for(j = 0; j < n; j +)            

43、;                                  cij = 0;                &

44、#160;        for(k = 0; k < y; k +)                             cij += aik*bkj;       &

45、#160;                              for(i = 0; i < x; i +)                

46、0;                             for(j = 0; j < n; j +)                  &

47、#160;                                   if(j = 0) printf("%d", cij);         

48、60;                   else printf(" %d", cij);                         

49、0;   aij = cij;                             cij = 0;                &#

50、160;            /memset(c,0,sizeof(c);                         printf("n");      

51、0;              printf("n");                     y = n;           

52、0;         l +;                          else                

53、;             printf("Not satisfied the definition of matrix multiplication!n");                 printf("n");     &

54、#160;           for(i = 0; i < m; i +)                     for(j = 0; j < n; j +)          

55、60;                                           aij = bij;      

56、60;                      bij = 0;                            

57、;                  /memset(b,0,sizeof(b);                  l +;           &

58、#160;      x = m;                  y = n;                      l +;    

59、;  1298Problem E: 递归的辗转相除法Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3219  Solved: 1821SubmitStatusWeb BoardDescription辗转相除法,也称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的几何原本(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的九章算术。两个整数的最大公约数(亦称公约数)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最

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

61、),用一个空格分隔。Sample Input24 36Sample Output12 72#include<stdio.h> int gcd(int a,int b)     int min, x;     if(a = b)         return b;     else          

62、;    if(a < b)                      min = a;             x = b - a;         &

63、#160;          else  if(a > b)                      min = b;             x = a - b; 

64、60;                if(min = x)             return min;         return  gcd(min,x);        

65、   int lcm(int a,int b)     return (a * b) / gcd(a, b);    int main()     int a, b;     scanf("%d %d", &a, &b);     printf("%d %d", gcd(a,b), lcm(a,b);    &#

66、160;return 0; 1245Problem F: The Hanoi TowerTime Limit: 1 Sec  Memory Limit: 16 MBSubmit: 2343  Solved: 1431SubmitStatusWeb BoardDescription“Hanoi Tower”问题的背景和搬移规则大家是否都很熟悉了?为了突出重点,我把问题描述放在下面的HINT部分,不了解的同学可以参考。首先我们Hanoi塔上的盘子按从上到下编号,假设Hanoi塔上有n个盘子,那么最小的那个盘子就是1号盘子,然后是2号、3号最大的盘子是n号。H

67、anoi塔的3根针我们也进行编号,最左边的是1号,中间的是2号,最右边的是3号。如果我们想把n=2个盘子从1号针搬到2号针,那么3号针作为暂存使用。整个搬移过程是这样的:1号盘子:从1号针搬到3号针2号盘子:从1号针搬到2号针1号盘子:从3号针搬到2号针你的任务是编个程序把上面的搬移过程输出来,程序需要输入盘子的个数n,并且这n个盘子一开始在哪根针,要搬到哪根针都是从输入得到的。Input输入为多行,至EOF结束。每行输入四个整数,第一个整数为盘子数n(1<=n<=10),后面的三个整数是三根针的编号,它们排列的顺序是有不同含义的:第二个整数是n个盘子一开始的位置,第四个整数是盘子

68、最终要放置的位置,第三个整数是搬移过程中用来暂存盘子的。如:输入“1 2 3 1”表示只有一个盘子,从第2根针搬到第1跟针上。Output每一行输入都对应一个搬移过程,首先输出一个“case i”,表示对应的第i个输入。然后再它后面输出搬移的步骤。如:输入“1 2 3 1”表示只有一个盘子,从第2根针搬到第1跟针上。那么它的搬移步骤只有一步:把1号盘子从第2跟针搬到第1跟针,即输出:plate 1 : from 2 to 1Sample Input1 2 3 12 2 3 13 1 2 34 3 1 2Sample Outputcase 1 : plate 1 : from 2 to 1cas

69、e 2 : plate 1 : from 2 to 3 plate 2 : from 2 to 1 plate 1 : from 3 to 1case 3 : plate 1 : from 1 to 3 plate 2 : from 1 to 2 plate 1 : from 3 to 2 plate 3 : from 1 to 3 plate 1 : from 2 to 1 plate 2 : from 2 to 3 plate 1 : from 1 to 3case 4 : plate 1 : from 3 to 1 plate 2 : from 3 to 2 plate 1 : from

70、 1 to 2 plate 3 : from 3 to 1 plate 1 : from 2 to 3 plate 2 : from 2 to 1 plate 1 : from 3 to 1 plate 4 : from 3 to 2 plate 1 : from 1 to 2 plate 2 : from 1 to 3 plate 1 : from 2 to 3 plate 3 : from 1 to 2 plate 1 : from 3 to 1 plate 2 : from 3 to 2 plate 1 : from 1 to 2HINT 梵塔问题出自古印度的数学故事。历史学家

71、鲍尔在数学拾零一书中是这样讲述这段故事的:在世界中心贝拿勒斯的圣庙里,安放着一个黄铜板,板上插着三根宝石针。每根针高约20英寸。梵天在创造世界的时候,在其中一根针上从下到上放了由大到小的64块金片,这就是梵塔(见图1.1)。不论白天黑夜,都有一个值班的僧侣按照梵天不渝的法则,把这些金片在三根针上移来移去:一次只能移一片,金片只能放在三根针上,并且要求在每根针上,都不能出现大片在上小片在下的情况。当所有64片都从梵天创造世界时所放的那根针移到另外一根针上时,世界就将在一声霹雳中消灭,梵塔、庙宇和众生都将同归于尽。这个故事听起来很可怕。只要那些值班的僧侣按照“梵天不渝”的法则把64块金片从一根针移

72、到另一根针上,世界末日就会到来。那么,僧侣们完成梵塔的移动工作需要多少时间呢?梵塔中共有64块金片,要把它们从一根针按“梵天不渝”的法则移到另一根针,即使僧侣们一次错误也不犯,也需移动264-1 = 18,446,744,073,709,511,615次。如果移动一块金片需要一秒钟,也要近58万亿年才能完成,根据宇宙进化论的推算,整个太阳系的寿命大约200亿年。可见,我们大可不必为梵塔故事的寓言而恐慌。#include <stdio.h> int move(int n, int a, int b, int c)     if(n = 1 )

73、             printf("   plate 1 : from %d to %dn", a, c);         return 0;          else    move(n - 1, a, c, b);  

74、;   printf("   plate %d : from %d to %dn", n, a, c);     move(n - 1, b, a, c); /*int move(int n,int  a,int c)    printf("   plate %d : from %d to %dn",n,a,c); int move1(int n,int a,int b,int c)   

75、;  if(n=1) move(1,a,c);     else                   move1(n-1,a,c,b);     move(n,a,c);     move1(n-1,b,a,c);      */ 

76、0;  int main()     int case1 = 1, plate, start, target, pass;     while(scanf("%d%d%d%d", &plate, &start, &pass, &target) != EOF)              printf("case %d

77、:n", case1);         move(plate, start, pass, target);         printf("n");         case1 +;      1208Problem G: 编写函数:Swap (II) (Append Code)Time

78、 Limit: 1 Sec  Memory Limit: 2 MBSubmit: 1918  Solved: 1244SubmitStatusWeb BoardDescription编写用来交换两段连续存储空间的函数,使得“Append Code”中的main()函数能正确运行。-编写一个函数swap_any()用来进行交换:原型:int swap_any(void *s, void *t, unsigned n);功能:前两个参数(指针s和指针t)分别标记出两处连续存储区域的起始地址,交换自s和t中地址开始的连续n个字节。函数的调用格式见“Append

79、 Code”。-Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。宏定义define被禁用。Input 测试数据分4四组,每组占2行,为两个相互交换的同类型数据。这四组测试数据分别为:2个不超过100个字符的串、2个单字符、2个整数和2个浮点数。Output 输出为4行,将2个同类型的数据交换后输出,用一个空格分开。Sample Input35353535Sample Output5 35 35 35 3HINT 这里可能用到库函数malloc()和memcpy()。#

80、include<stdio.h> #include<stdlib.h> #include<memory.h> int swap_any(void *s, void *t, unsigned n)     void *tmp;     tmp = malloc(n);     if(tmp = NULL)         return 1;   

81、;  memcpy(tmp, s, n);     memcpy(s, t, n);     memcpy(t, tmp, n);     free(tmp);     return 0;   int main()     int a, b;     double x, y;    

82、60;char c, d;     char s1001, t1001;       gets(s);     gets(t);     swap_any(s, t, sizeof(s);     printf("%s %sn", s, t);       c = getchar();  

83、   getchar();     d = getchar();     getchar();     swap_any(&c, &d, sizeof(char);     printf("%c %cn", c, d);       scanf("%d %d", &a, &b)

84、;     swap_any(&a, &b, sizeof(int);     printf("%d %dn", a, b);       scanf("%lf %lf", &x, &y);     swap_any(&x, &y, sizeof(double);     printf(&q

85、uot;%lg %lgn", x, y); 1383Problem H: 动态的数组Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3346  Solved: 1251SubmitStatusWeb BoardDescription输入N个浮点数,输出其中第m个第n个数,满足m<n。-你需要编写以下4个函数,完成这个程序:double* allocate(int n),在动态内存上分配n个元素的double型数组,并返回其首地址。void input(double* p, int n),向p中

86、输入n个double型数值。void output(double* p, int n),把长度为n的数组p中符合条件的第m个第n个元素输出,m和n从标准输入读取。void release(double* p),释放p所指的动态内存空间。函数的调用格式见“Append Code”。Input输入的第一个整数N(在int范围内),表示后跟N个double类型的浮点数。输入的最后是两个整数m和n,满足m<n,m和n在int范围内,但不一定在1N之间。Output输出第m个第n个之间的浮点数,每个数占一行。若区间m,n和1,N没有任何重叠,则输出“no output”。区间m,n和1,N有交集时

87、,但给出的n超出第N个数的范围,则只需输出到第N个数,m超出范围时同样处理。Sample Input201 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2015 25Sample Output151617181920HINTAppend Codeappend.c, append.cc, #include<stdio.h> #include<stdlib.h> double* allocate(int n)     double *p;     

88、p = malloc (n * sizeof(double);     return p; void input(double *p, int n)     int i;     for(i = 0; i < n; i +)         scanf("%lf", p + i); void output(double* p, int n)   

89、60; int a, b, i;     scanf("%d%d", &a, &b);     if(b <= 0|a >= n)         printf("no output");     else          

90、60;  if(a < 0)             a = 0;         else            a -= 1;         if(b > n)

91、            b = n;         for(i = a; i < b; i +)             printf("%lgn",pi);      void release(double*

92、p)     free(p);     p = NULL;   int main()     int len;     double *array;     scanf("%d", &len);     array = allocate(len);     input(a

93、rray, len);     output(array, len);     release(array); 1334Problem I: 动态的字符串排序Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 2841  Solved: 815SubmitStatusWeb BoardDescription把字符串按照ASCII码序的从小到大排列出来。串的ASCII码序遵循如下递归定义:1 两串的前n-1个字符相同,第n个字符ASCI

94、I码序小的排在前面;2 只有两串的字符完全相同时,才有两串相等。字符的ASCII码序比较可以用strcmp()函数完成。Input第一行输入为一个整数N(N<=50,000),后接N行,每行一个字符串,串长不超过100,000。Output输出为N行,按照字符串的ASCII码序排列,ASCII码序小的排前面。Sample Input10abcbcacacacaacababcdabaSample OutputaacabaabcacababcbcccadaHINT用二维数组很难一次性分配出这么大的空间了,要用到根据输入变化的动态分配的内存才行。这里需要动态的数据结构,比如,字符指针的数组“c

95、har *s”,或者是二维的字符指针“char *s”,等等。#include<stdio.h> #include<string.h> #include<stdlib.h> int main()     int n, i, j, len;     scanf("%d", &n);     getchar();     char *sn, *s1;   &

96、#160; for(i = 0; i < n; i +)              s1 = malloc(sizeof(char) * 100001);         gets(s1);         len = strlen(s1);      

97、   si = malloc(sizeof(char) * (len + 1);         strcpy(si, s1);         free(s1);          int *temp;     for(i = 0; i < n - 1; i +)  &#

98、160;      for(j = i; j < n; j +)         if(strcmp(si, sj) > 0)                      temp = si;     

99、0;       si = sj;             sj = temp;              for(i = 0 ; i < n ; i+)            

100、60; printf("%sn", si);         free(si);      1048Problem J: 魔方阵Time Limit: 1 Sec  Memory Limit: 16 MBSubmit: 3512  Solved: 1623SubmitStatusWeb BoardDescription所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N2组成,且方阵每行每列以及对角线的元素和

101、相等。如三阶魔方阵:8 1 63 5 74 9 2魔方阵的规律如下:   从1N*N的 各个数依次如下规则存放:      (1) 1在第一行中间一列;      (2) 每一个数存放的行比前一个数的行数减一,列数加一(如上的三阶方阵5在4的上一行,后一列);      (3) 如果上一个数在第一行,则下一个数在最后一行,列数加一;      (4) 如果上一个数在最后一列,则下一个数在第一列,行数减一;  

102、0;   (5) 如果按上述规则确定的位置已经有数,或上一个数在第一行第N列,则下一个数放在上一个数的正下方。Input输入包含多组数据,每组为一个小于100的正奇数。Output对于每个输入的N,输出N阶魔方阵;两组数据之间用一个空行分隔。方阵中每行每两个数之间有一个空格,行首和行末没有多余的空格。Sample Input3Sample Output8 1 63 5 74 9 2#include <stdio.h>  int main()        int a,b,c,d,i,j;

103、60;     int s100100 ;     while(scanf("%d",&b)!=EOF)          if(b%2!=0)                       &

104、#160;for (i=0; i<b; i+)                  for (j=0; j<b; j+)                      sij=0;   

105、0;          d=(b-1)/2;              c=0;              s0d=1;           

106、;   for(a=2; a<=b*b; a+)                                if(c-1>=0)           &#

107、160;                            if(d+1>b-1)                                  

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论