博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
26.魔方阵问题
阅读量:4678 次
发布时间:2019-06-09

本文共 2078 字,大约阅读时间需要 6 分钟。

规律性递归

完整代码

1 #define _CRT_SECURE_NO_WARNINGS  2 #include 
3 #include
4 5 void magic(int **pp, int n) 6 { 7 int i = 0; 8 //中间位置 9 int j = (n - 1) / 2; 10 int key = 1; 11 //定义第一个元素的值 12 pp[i][j] = key; 13 14 while (key < n*n) 15 { 16 //如果在右上边界,则下一个自增 17 if (i - 1 < 0 && j + 1 >= n) 18 { 19 i++; 20 pp[i][j] = ++key; 21 continue; 22 } 23 //如果在第一行,下一个数据跳到最后一行填充 24 if (i - 1 < 0) 25 { 26 i = n - 1; 27 } 28 //否则往上移一行 29 else 30 { 31 i--; 32 } 33 34 //如果在最后一列,下一个数据跳到第一列填充 35 if (j + 1 >= n) 36 { 37 j = 0; 38 } 39 //否则跳到下一列 40 else 41 { 42 j++; 43 } 44 45 //如果没有数据 46 if (pp[i][j] == -1) 47 { 48 //赋值 49 pp[i][j] = ++key; 50 } 51 //如果有数据则跳到下面两行,列数往前移动1 52 else 53 { 54 i += 2; 55 j--; 56 pp[i][j] = ++key; 57 } 58 } 59 } 60 61 62 63 64 void main() 65 { 66 int n; 67 scanf("%d", &n); 68 //n必须是基数 69 if (n % 2 == 0) 70 { 71 printf("无效"); 72 getchar(); 73 getchar(); 74 return; 75 } 76 77 //分块数组 78 int **pp = (int **)malloc(sizeof(int*)*n); 79 for (int i = 0; i < n; i++) 80 { 81 pp[i] = (int *)malloc(sizeof(int)*n); 82 } 83 84 //初始化 85 for (int i = 0; i < n; i++) 86 { 87 for (int j = 0; j < n; j++) 88 { 89 //数据清空 90 pp[i][j] = -1; 91 } 92 } 93 //计算 94 magic(pp, n); 95 //输出 96 for (int i = 0; i < n; i++) 97 { 98 for (int j = 0; j < n; j++) 99 {100 //数据清空101 printf("%3d", pp[i][j]);102 }103 printf("\n");104 }105 106 system("pause");107 }

 

转载于:https://www.cnblogs.com/xiaochi/p/8525302.html

你可能感兴趣的文章
PAT-1134. Vertex Cover (25)
查看>>
git 命令图解
查看>>
分布式存储系统可靠性系列三:设计模式
查看>>
this关键字的由来及使用
查看>>
两个时间相差多少 .net中的timespan应用
查看>>
递归 换零钱问题——由打靶子问题引申
查看>>
Python-函数基础
查看>>
Extensible Messaging and Presence Protocol (XMPP) 简介
查看>>
Farm Irrigation
查看>>
windows平板的开发和选型
查看>>
无平方因子的数(数论初步) By ACReaper
查看>>
C语言截取字符串
查看>>
如何查自己的账单
查看>>
JAVA8学习笔记(二)----三个预定义接口
查看>>
JDBC连接各种数据库的字符串
查看>>
构建之法阅读笔记06
查看>>
CentOS minimal新装配置笔记
查看>>
压缩映象原理的一个应用
查看>>
Aurora — 一个在 MSOffice 内输入 LaTeX 公式的很好用插件
查看>>
关于sql优化的一个小总结
查看>>