• 幻方


    所谓“幻方”,是一个行、列为奇数的方阵,把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;
    }
  • 相关阅读:
    Web前端的状态管理(State Management)
    使用iScroll实现上拉或者下拉刷新
    实现checkbox组件化(Component)
    HTML5 文件异步上传 — h5uploader.js
    利用javascript和WebGL绘制地球 【翻译】
    利用JS跨域做一个简单的页面访问统计系统
    Java JSON、XML文件/字符串与Bean对象互转解析
    JS实现星级评价
    Spring中@Component注解,@Controller注解详解
    制作滑动条菜单,如何延时处理滑动效果,避免动画卡顿
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/5122988.html
Copyright © 2020-2023  润新知