庸俗题解(不是)||N-打印图像-列正逆
2024-08-31 00:51:17
发布于:广东
32阅读
0回复
0点赞
当你发现了规律(有一点点考验数学),这题就会变得非常简单!
我们来对样例1输出图像中 第[i][j] 位置与第[i][j-1] 位置上的数相减,将结果记下,你就会得到这张表:
/ | j=2 | j=3 | j=4 |
---|---|---|---|
i=1 | 7 | 1 | 7 |
i=2 | 5 | 3 | 5 |
i=3 | 3 | 5 | 3 |
i=4 | 1 | 7 | 1 |
可以发现,表格中对于第i行,相邻的两个值之和为2n,且当j为偶数时,值为2(n+1-i)-1。
观察样例2的输出图像,发现该规律也适用。
AC代码:
#include<iostream>
using namespace std;
int main(){
int n; cin>>n;
int k=1,m=2*n-1;//以k作为输出图像的变量,第i行1列时k值等于i
//m为j为偶数时的差值(一开始的i为1,公式里的+1-1抵消掉了)
for(int i=1;i<=n;i++){
cout<<i<<" ";//先输出第一列的数字
for(int j=2;j<=n;j++){//输出第2列至第n列的数字
if(j%2==0)k+=m; //j为偶数时,k=前一个数+偶数差值
else k+=2*n-m; //j为奇数时,k=前一个数+奇数差值
//相邻两差值之和为2*n,j为偶数时差值为m,因此j为奇数时差值就是用2*n-m
cout<<k<<" ";//输出图像
}
m=2*(n-i)-1;//一行输出完,重置一下m(下一行的i值=该行的i值+1,公式里+1-1同样被抵消掉了)
k=i+1;//重置k(下一行的i值=该行的i值+1,所以k=i+1)
cout<<endl;//记得换行
}
return 0;
}
真是一场酣畅淋漓的数学课呢 不需要数组,两个变量就能搞定!有疑问可在评论区询问~
全部评论 1
甜菜
2024-08-26 来自 广东
0🤓☝️
2024-08-26 来自 广东
0
有帮助,赞一个