|
发表于 2020-12-11 18:55:29
|
显示全部楼层
本楼为最佳答案
本帖最后由 风过无痕1989 于 2020-12-11 18:56 编辑
C语言的,我这电脑里就有
- #include<stdio.h>
- #include<stdlib.h>
- int array(int n)
- {
- int i, j, no, num, max;
- int *mtrx;
- if(n%2 == 0) /*n是偶数,则加1使其变为奇数*/
- {
- n = n + 1;
- }
- max = n * n;
- mtrx = (int *)malloc(max + max); /*为魔方阵分配内存*/
- mtrx[n / 2] = 1; /* 将1存入数组*/
- i = 0; /*自然数1所在行*/
- j = n / 2; /*自然数1所在列*/
- /*从2开始确定每个数的存放位置*/
- for(num = 2; num <= max; num++)
- {
- i = i - 1;
- j = j + 1;
- if((num - 1) % n == 0) /*当前数是n的倍数*/
- {
- i = i + 2;
- j = j - 1;
- }
- if(i < 0) /*当前数在第0行*/
- {
- i = n - 1;
- }
- if(j > n - 1) /*当前数在最后一列,即n-1列*/
- {
- j = 0;
- }
- no = i * n + j; /*找到当前数在数组中的存放位置*/
- mtrx[no] = num;
- }
- /*打印生成的魔方阵*/
- printf("生成的%d-魔方阵为:",n);
- no = 0;
- for(i = 0; i < n; i++)
- {
- printf("\n");
- for(j = 0; j < n; j++)
- {
- printf("%3d", mtrx[no]);
- no++;
- }
- }
- printf("\n");
- free(mtrx);
- return 0;
- }
- int main()
- {
- int n;
- printf("请输入n值:");
- scanf("%d", &n);
- array(n); /*调用array函数*/
- return 0;
- }
复制代码 |
|