xuminzhou


私信TA

用户名:xuminzhou

访问量:8402

签 名:

codeing and writing

等  级
排  名 4696
经  验 1652
参赛次数 0
文章发表 10
年  龄 0
在职情况 学生
学  校 Nanchang University
专  业

  自我简介:

解题思路:
开始想用动态分配内存连续的二维数组,然后按照对角线依次把数字放入各个位置(先判断右上是否越界,如果未越界,则放在右上,如果右上越界,则扫描二维数组的第0列找出第一个空的位置放入),最后在把二维数组中的非零元素输出。


然...这样做好蛋疼啊,不仅要考虑非零元素不能输出,还要不停的记录上一个位置的状况。


所以,果断转换思路,寻找n*n矩阵中数字的规律,根据规律依次输出各行各列,规律有:


1.如果从零开始计数,第i行有n-i个元素,并且这n-i个元素差距依次加大,例如第0行(1 3 6 10 15),差距分别为2 3 4 5,第1行(2 5 9 14),差距分别为3 4 5。


2.每一行的起始元素之间也是有关系的,例如1 2 4 7 11,差距依次加大,分别为:1 2 3 4。

参考代码:

#include<iostream>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        int begin=1;
        for(int i=0;i<n;++i){
            begin+=i;
            int going=begin;
            for(int j=0;j<n-i;++j){
                if(j!=n-i-1)cout<<going<<" ";
                else cout<<going;
                going+=(j+2+i);
            }
            cout<<endl;
        }
    }
	return 0;
}


 

0.0分

13 人评分

  评论区

  • «
  • »