zoukankan      html  css  js  c++  java
  • C 魔方阵

    #include <stdio.h>
    #include <stdlib.h>
    
    #define N 9
    int normal(int i,int j,int mySize);
    int isLine1Only(int i,int j,int mySize);
    int isColNOnly(int i,int j,int mySize);
    int isLine1ColN(int i,int j,int mySize);
    int hasNumbers(int i,int j,int mySize);
    void makeCube(int n);
    void printCube(int mySize);
    void initMatrix();
    
    
    int matrix[N][N];
    int main(){
        //matrix初始化
        int i=0;
        int j=0;
    
        //注意 这里mySize应该是奇数
        for(i=3;i<=N;i+=2){
            initMatrix();
            printf("----%d--\n",i);
            makeCube(i);
            printCube(i);
            printf("--------------\n");
        }
        return 1;
    }
    
    void makeCube(int mySize){
        //数字1应该放在中间一列
        int i=0;
        int j=(mySize-1)/2;
    
        int k=0;
        for(k=1;k<=mySize*mySize;k++){
            matrix[i][j]=k;
            if(k==mySize*mySize)break;
    
            //正常情况
            if(normal(i,j,mySize)){
                //准备好下一次的坐标
                i=i-1;
                j=j+1;
            }else if(isLine1Only(i,j,mySize)){//在第一行  但不是最后一列//那么接下来是最后一行
                i=mySize-1;
                j=j+1;
            }else if(isColNOnly(i,j,mySize)){//在最后一列 但不是第一行//接下来列数为第一列
                j=0;
                i=i-1;
            }else if(hasNumbers(i,j,mySize)){//右上角已经有数字//就放在现在的数字下方
                i=i+1;
            }else if(isLine1ColN(i,j,mySize)){//第一行最后一列
                i=i+1;
            }
            //matrix[i][j]=k;
    
        }
    }
    
    //正常情况 指的是右上角仍然在矩阵内//且右上角没有数字
    int normal(int i,int j,int mySize){
        //printf("-%d-",1);
        if((i>0)&&(j<mySize-1)&&matrix[i-1][j+1]==0){
            return 1;
        }else{
            return 0;
        }
    
    }
    
    
    //在第一行  但不是最后一列
    int isLine1Only(int i,int j,int mySize){
        //printf("-%d-",2);
        if(i==0 &&j!=mySize-1){
            return 1;
        }else{
            return 0;
        }
    }
    
    //在最后一列 但不是第一行
    int isColNOnly(int i,int j,int mySize){
        //printf("-%d-",3);
        if(i!=0 && j==(mySize-1)){
            return 1;
        }else{
            return 0;
        }
    
    }
    
    //在第一行最后一列
    int isLine1ColN(int i,int j,int mySize){
        //printf("-%d-",5);
        if(i==0 &&j==mySize-1){
            return 1;
        }else{
            return 0;
        }
    
    }
    
    
    
    //右上角有数字//前提是右上角仍在矩阵内
    int hasNumbers(int i,int j,int mySize){
        //printf("-%d-",4);
        int flag=0;
        if((i>0)&&(j<mySize-1)&&matrix[i-1][j+1]!=0){
            flag=1;
        }else{
            flag=0;
        }
        return flag;
    
    }
    
    
    void printCube(int mySize){
        int i=0;
        int j=0;
        for(i=0;i<mySize;i++){
            for(j=0;j<mySize;j++){
                if(matrix[i][j]!=0){
                    printf("%2d ",matrix[i][j]);
                }
            }
            printf("\n");
        }
    
    }
    
    void initMatrix(){
        int i=0;
        int j=0;
        for(i=0;i<N;i++){
            for(j=0;j<N;j++){
                matrix[i][j]=0;
            }
        }
    
    }
    结果是
    ----3--
     8  1  6 
     3  5  7 
     4  9  2 
    --------------
    ----5--
    17 24  1  8 15 
    23  5  7 14 16 
     4  6 13 20 22 
    10 12 19 21  3 
    11 18 25  2  9 
    --------------
    ----7--
    30 39 48  1 10 19 28 
    38 47  7  9 18 27 29 
    46  6  8 17 26 35 37 
     5 14 16 25 34 36 45 
    13 15 24 33 42 44  4 
    21 23 32 41 43  3 12 
    22 31 40 49  2 11 20 
    --------------
    ----9--
    47 58 69 80  1 12 23 34 45 
    57 68 79  9 11 22 33 44 46 
    67 78  8 10 21 32 43 54 56 
    77  7 18 20 31 42 53 55 66 
     6 17 19 30 41 52 63 65 76 
    16 27 29 40 51 62 64 75  5 
    26 28 39 50 61 72 74  4 15 
    36 38 49 60 71 73  3 14 25 
    37 48 59 70 81  2 13 24 35 
    --------------
  • 相关阅读:
    Redis on Spark:Task not serializable
    一次Spark应用程序参数优化案例
    Spark性能优化(2)——广播变量、本地缓存目录、RDD操作、数据倾斜
    Spark性能优化(1)——序列化、内存、并行度、数据存储格式、Shuffle
    Java – Convert IP address to Decimal Number
    Java IP地址字符串与BigInteger的转换, 支持IPv6
    Spark性能优化(2)——广播变量、本地缓存目录、RDD操作、数据倾斜
    Android Matrix类以及ColorMatri
    OpenGL中shader使用
    Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedClient)的创建过程分析 .
  • 原文地址:https://www.cnblogs.com/cart55free99/p/2972274.html
Copyright © 2011-2022 走看看