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
    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录
    Django学习笔记(15)——中间件
    JAVA—API和SPI概念
    mybatis 映射器(mappers) 配置说明 加载映射文件方式
    Java的三种代理模式
    如何选择分布式事务形态(TCC,SAGA,2PC,补偿,基于消息最终一致性等等)
    什么是分布式系统中的幂等性
    js date 前一天
    getCanonicalFile与getAbsoluteFile区别
    Mybatis 示例之 SelectKey
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/4423349.html
Copyright © 2011-2022 走看看