题目:
打印图形
1
3 2
4 5 6
10 9 8 7
题解:
思路:
- 首先利用双重循环打印斜三角形框架。
- 将数字按位置顺序存放。
- 将偶数列的数据逆序排列,打印。
注意:
这里需要注意的有两点:
如何指定数组中某个位置的逆序输出。
vector的升序排序是sort(a.begin(),a.end()),降序排序为sort(a.rbegin(),a.rend()).
这里需要注意一下:
c.begin() 返回一个迭代器,它指向容器c的第一个元素
c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置
c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素
c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置
逆向迭代器是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++ 运算将访问前一个元素,而 – 运算则访问下一个元素。
执行并观察以下程序帮助理解:
1
2
3
4
5
6
7
8
9
10
11
12
13
using namespace std;
int main(){
int n=4,s=0;
//cin>>n;
vector<int> a;
for (int i=0;i<=n*n;i++) a.push_back(i);
sort(a.rbegin()+2,a.rend()-5);
for(int i=0;i<n*n;i++) cout<<a[i]<<" ";
return 0;
}输出结果如下:
偶数列在数组中的坐标。
由题目可以观察得出,
需要排序的起始位置为之前输出的位数总和,终止位置为本行及本行以上的位数总和。
得出表达式(1/2)n(n+1)。
代码:
1 |
|