解题思路:
开始想用动态分配内存连续的二维数组,然后按照对角线依次把数字放入各个位置(先判断右上是否越界,如果未越界,则放在右上,如果右上越界,则扫描二维数组的第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 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:815 |
程序员的表白 (C语言代码)浏览:1328 |
简单编码 (C++代码)浏览:678 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:563 |
C语言程序设计教程(第三版)课后习题5.7 (Java代码)浏览:889 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:662 |
WU-链表数据求和操作 (C++代码)浏览:1318 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:563 |
演讲大赛评分 (C语言代码)浏览:1641 |
C二级辅导-公约公倍 (C语言代码)浏览:483 |