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;
    }
     
  • 相关阅读:
    最长连续子序列(dp,分而治之递归)
    判断线段是否相交
    1840: Jack Straws
    5065: 最长连续子序列
    TZOJ 4493: Remove Digits
    TZOJ 5271: 质因数的个数
    2019年天梯赛
    PTA 树的遍历
    TZOJ:3660: 家庭关系
    PTA 复数四则运算
  • 原文地址:https://www.cnblogs.com/ssfannnnn/p/14307702.html
Copyright © 2011-2022 走看看