正在加载图片...
上面一行,接着生成右边一列,再生成下面一行,最后生成左边一列。要注意两点:与6.10 题一样,用一个变量d控制当前应填入矩阵中的数,每填入一次d就加一,以保证填入的数 不会出错。此其一;其二,注意控制每一行每一列的上、下界。下面是它的一个实现方案。 #define max 20 #includestdio. h> int main( inta[MAX+1[MAX+1];/*数组0下标未用*/ printf("Input n=") scanf(%d", &n) d=0: f(n%2)m=n/2+1;/*变量m控制循环的次数*/ else m=n/2 for(i=1; i <=m; ++1) for(j=i; j<= n-i+1: ++j) /*生成上面一行元素* a[i]lj] for(j=i+1;j<=n-i+1;++j)/*生成右边一列元素*/ [j][ni+1]=+d for (j=n-i /*生成下面一行元素* a[n-i+1][j]=++d; for (j=n-i: j >=i+l: --j) /*生成左边一列元素*/ a[j][i]=++d }/至此,螺旋方阵已经生成* printf("\n");/*下面是输出螺旋方阵*/ for(i=1: i <=N: ++i) for(j=1: j<=N: ++j) printf(%4d, a[i]lj]) printf("\n\n") 6.12编程,按递增序生成集合M最小的100个数。M的定义如下: 数1属于M ②如果x属于M,则y=2x+1和z=3x+1也属于M: ③再也没有别的数属于M 算法分析:用数组存放M。对任一自然数K,若K能用M中已存在的数生成,则将K存 人数组。如此依次考察自然数,则得到的必是最小的、互异的数。下面是一种实现方案 #includestdio. h> int maino5 上面一行,接着生成右边一列,再生成下面一行,最后生成左边一列。要注意两点:与 6.10 题一样,用一个变量 d 控制当前应填入矩阵中的数,每填入一次 d 就加一,以保证填入的数 不会出错。此其一;其二,注意控制每一行每一列的上、下界。下面是它的一个实现方案。 #define MAX 20 #include<stdio.h> int main() { int i,j,d,m,n; int a[MAX+1][ MAX+1] ; /* 数组 0 下标未用 */ printf("Input n= "); scanf("%d", &n); d = 0; if(n % 2) m = n / 2+1; /* 变量 m 控制循环的次数 */ else m = n / 2; for(i = 1; i <= m; ++i) { for(j = i; j <= n-i+1; ++j) /* 生成上面一行元素 */ a[i][j] = ++d; for (j = i+1; j <= n-i+1; ++j) /* 生成右边一列元素 */ a[j][n-i+1] = ++d; for (j = n-i; j >= i; --j) /* 生成下面一行元素 */ a[n-i+1][j]=++d; for (j = n-i; j >= i+1; --j) /* 生成左边一列元素 */ a[j][i] = ++d; } /* 至此,螺旋方阵已经生成 */ printf("\n"); /* 下面是输出螺旋方阵 */ for(i = 1; i <= N; ++i) { for(j = 1; j <= N; ++j) printf("%4d",a[i][j]); printf("\n\n"); } } 6.12 编程,按递增序生成集合 M 最小的 100 个数。M 的定义如下: ① 数 1 属于 M; ② 如果 x 属于 M,则 y=2x+1 和 z=3x+1 也属于 M; ③ 再也没有别的数属于 M。 算法分析:用数组存放M。对任一自然数K,若K能用M中已存在的数生成,则将K存 人数组。如此依次考察自然数,则得到的必是最小的、互异的数。下面是一种实现方案: #include<stdio.h> int main()
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有