zoukankan      html  css  js  c++  java
  • 幻方

    所谓“幻方”,是一个行、列为奇数的方阵,把1n²(平方)个不同的数放入方阵中,使方阵的每行、每列和每个对角线上的元素的和全部相等。

    编写程序,对输入不大于15的n(方阵的阶数),打印出相应的幻方。

    方法:

    1)先把1放在第一行的中间位置;

    2)下一个数放在上一个数的右上方;

    3)若右上方已超出方阵的第一行,则下一个数放在下一列的最后一行上;

    4)若右上方已超出方阵的最后一列,则下一个数放在上一行的第一列上;

    5)若右上方已经有数,或右上方已超出方阵的第一行最后一列,则下一个数放在上一个数的正下方。

     (6)所有数字已经放完就结束,否则重复2~5

    #include <stdio.h>
    #include <stdlib.h>
    int flag[15][15];
    int main()
    {
        int n;
        int col,row;
        int t;
        printf("幻方的阶数(奇数):");
        scanf("%d",&n);
        int **mat = (int**)malloc(sizeof(int*)*n);
        for(int j=0;j<n;j++)
            mat[j] = (int*)malloc(sizeof(int)*n);
        t = 1;
        mat[0][n/2] = t;
        flag[0][n/2] = 1;
        row = 0;
        col = n/2;
        while(1)
        {
            t ++;
            if(t > n*n)//放完所有数
                break;
            if(row >0 && col < n-1)
            {
                if(flag[row-1][col+1])//右上方有数,则下一个数放在上一个数的正下方
                {
                    row ++;
                    mat[row][col] = t;
                    flag[row][col] = 1;
                }
                else{//右上方无数,则放在右上方
                    row --;
                    col ++;
                    mat[row][col] = t;
                    flag[row][col] = 1;
                }
            }
            else if(row == 0 && col == (n-1)){//右上方已超出方阵的第一行最后一列,则放在上一个数的正下方
                    row ++;
                    mat[row][col] = t;
                    flag[row][col] = 1;
            }
            else if(row == 0){//位于第一行,下一个数放在下一列的最后一行上
                row = n-1;
                col ++;
                mat[row][col] = t;
                flag[row][col] = 1;
            }
            else{//位于最后一列,下一个数放在上一行的第一列上
                col = 0;
                row --;
                mat[row][col] = t;
                flag[row][col] = 1;
            }
        }
        for(int k=0;k<n;k++)
        {
            for(int j=0;j<n;j++)
                printf("%-4d",mat[k][j]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    网页设计的12种颜色
    深入理解编辑过程
    数据压缩
    <Mastering KVM Virtualization>:第四章 使用libvirt创建你的第一台虚拟机
    <Mastering KVM Virtualization>:第三章 搭建独立的KVM虚拟化
    <Mastering KVM Virtualization>:第二章 KVM内部原理
    <Mastering KVM Virtualization>:第一章 了解Linux虚拟化
    本地设置
    Spring Data JPA之删除和修改
    在Mac Chrome上关闭跨域限制--disable-web-security
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/5122988.html
Copyright © 2011-2022 走看看