zoukankan      html  css  js  c++  java
  • 26.魔方阵问题

    规律性递归

    完整代码

      1 #define _CRT_SECURE_NO_WARNINGS
      2 #include <stdio.h>
      3 #include <stdlib.h>
      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("
    ");
    104     }
    105 
    106     system("pause");
    107 }
  • 相关阅读:
    每日随笔
    每日随笔
    每日随笔
    每日随笔
    nginx的Rewrite重写
    多台机器做动静分离
    单台机器动静分离
    四层负载均衡实践
    四层负载均衡特点
    四层负载均衡做端口转发
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8525302.html
Copyright © 2011-2022 走看看