zoukankan      html  css  js  c++  java
  • 平方矩阵 II

    输入整数N,输出一个N阶的二维数组。

    数组的形式参照样例。

    输入格式

    输入包含多行,每行包含一个整数N。

    当输入行为N=0时,表示输入结束,且该行无需作任何处理。

    输出格式

    对于每个输入整数N,输出一个满足要求的N阶二维数组。

    每个数组占N行,每行包含N个用空格隔开的整数。

    每个数组输出完毕后,输出一个空行。

    数据范围

    0N1000≤N≤100

    输入样例:

    1
    2
    3
    4
    5
    0
    

    输出样例:

    1
    
    1 2
    2 1
    
    1 2 3
    2 1 2
    3 2 1
    
    1 2 3 4
    2 1 2 3
    3 2 1 2
    4 3 2 1
    
    1 2 3 4 5
    2 1 2 3 4
    3 2 1 2 3
    4 3 2 1 2
    5 4 3 2 1

    平方矩阵这题与循环日程表有相似之处,但采用的算法是完全不同的,平方矩阵采用的是通过解决若干个子问题来达到解决整个问题的目的,是典型的分治思想。但平方矩阵相比于循环日程表稍微简单一些,只需要利用矩阵对称的性质就可以做了,并不需要分治。
    思路:1.将上三角和下三角分开看,分别为两个位置a[i][j]和a[j][i]赋相同的值;
        2.注意:当i==j时,a[i][j]==1;

    AC代码:
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N = 120;
    int a[N][N];
    
    int main()
    {
        ios::sync_with_stdio(false);
        int n;
        while(cin>>n&&n){
        
            int k = 1;
            for(int i = 0;i<n;++i){
                for(int j = i;j<=n;++j){
                    if(i!=j) a[i][j] = a[j][i] = k;
                    else a[i][j] = k;
                    k++;
                }
                k = 1; //每一行做完之后将k重新赋为0,根据题目可以看出来
            }
            
            for(int i = 0;i<n;++i){
                for(int j = 0;j<n;++j){
                    cout<<a[i][j]<<" ";
                }
                cout<<endl;
            }    
            cout<<endl;
        }
        return 0;
    }
     
  • 相关阅读:
    linux安装篇之mongodb安装及服务自启动配置
    Linux下启动mongodb
    java 实现 图片与byte 数组互相转换
    用java imageio调整图片DPI,例如从96调整为300
    StringRedisTemplate操作redis数据
    Docker 更换国内的Hub源
    2、Docker 基础安装和基础使用 一
    Centos 6.x Openssh 升级 7.7p1 版本
    1、Docker 简介
    2. Python环境安装
  • 原文地址:https://www.cnblogs.com/ssfannnnn/p/14307702.html
Copyright © 2011-2022 走看看