zoukankan      html  css  js  c++  java
  • 制作一个螺旋矩阵

     问题:打印输出逆时针螺旋矩阵,要求螺旋矩阵的阶数由用户输入。例如 n=4时,输出的螺旋矩阵如下:

      

    这个题目要考虑n的奇偶性,有个人在博客园提问后思考,他用的是Java代码,自己也动手操作了一下,感觉还行吧,贴两个代码,就当是机智题咯。勿喷

    #include <iostream>
    #define max 100
    ///让输出的最大值为100
    using namespace std;
    int ans [max][max];
    
    int main()
    {
        cout<<"请输入要输出的矩阵的大小,当为0时就结束程序"<<endl;
        int n;
    
        while(cin>>n){
                int count = 1;
            for(int x = 0;x < n/2;x++){
                for(int i = x;i < n-x;i++){
                    ans[i][x]=count++;
                }
    
                for(int i = x+1; i < n-x; i++)
                    {ans[n-1-x][i]=count++;
                    //cout<<count<<" ";
                    }
    
                for(int i = x+1; i < n-x; i++)
                    ans[n-i-1][n-1-x]=count++;
    
    
                for(int i = x+1; i < n-x-1; i++)
                    ans[x][n-i-1]=count++;
            }
            if(n%2==1)ans[n/2][n/2]=n*n;
            //将结果进行打印
            for(int i = 0;i < n;i++){
                for(int j = 0;j < n;j++)
                    cout<<ans[i][j]<<" ";
    
                    cout<<endl;
            }
    
        }
        return 0;
    }
    View Code

    当不考虑奇偶性质的时候,我们知道,问题就是出在最中心的那个单一的点,我的想法就是提前将所有的值初始化为n*n,然后和原来一样操作就可以了。

    #include <iostream>
    #define max 100
    ///让输出的最大值为100
    using namespace std;
    int ans [max][max];
    
    int main()
    {
        cout<<"请输入要输出的矩阵的大小,当为0时就结束程序"<<endl;
        int n;
    
        while(cin>>n){
                for(int i = 0;i < n;i++){
                    for(int j = 0;j < n;j++){
                        ans[i][j]=n*n;
                    }
                }
                int count = 1;
            for(int x = 0;x < n/2;x++){
                for(int i = x;i < n-x;i++){
                    ans[i][x]=count++;
                }
    
                for(int i = x+1; i < n-x; i++)
                    {ans[n-1-x][i]=count++;
                    //cout<<count<<" ";
                    }
    
                for(int i = x+1; i < n-x; i++)
                    ans[n-i-1][n-1-x]=count++;
    
    
                for(int i = x+1; i < n-x-1; i++)
                    ans[x][n-i-1]=count++;
            }
            
            
            //if(n%2==1)ans[n/2][n/2]=n*n;
            //将结果进行打印
            for(int i = 0;i < n;i++){
                for(int j = 0;j < n;j++)
                    cout<<ans[i][j]<<" ";
    
                    cout<<endl;
            }
    
        }
        return 0;
    }
    View Code
    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    【数据大屏设计】有点意思
    MySQL环境搭建
    关于MySQL数据库
    zip-gzip-bzip2_压缩文件
    Linux的链接文件-ln命令
    电脑为什么越用越慢
    按下开机键,计算机背后的故事
    Windows最全快捷键
    环境搭建-VMware安装系统
    wee hours
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/4423349.html
Copyright © 2011-2022 走看看