这么水的一道题竟然没有题解,对本蒟蒻等只会刷水题的人写题解产生了莫大的鼓励,希望能帮到像我一样的广大蒟蒻们
言归正传。作为一名小学生,一看到这道题就有一种熟悉感扑面而来。想必大家在小学时一定做过这样的题目,例如从1加到100的这种高斯求和的问题,一开始,数学老师们都会让我们这样去做:把1和100配对,2和99配对,3和98配对,4和97配对,以此类推。这种经(hao)典(sha)的方法也能运用到这道题中。因为文中说“第i块的权值为i”,所以我们就能把它看作一个从1到n的平方的等差数列,这里分两种情况讨论:
1.n的平方为偶数
直接按照刚才配对的方法,把每组数挨个输出(记得要换行!),直接退出主程序就行了。
2.n的平方为奇数
整体思路和偶数的一样,但是要在输出时的最后一行输出中间的数。
好了,思路说完了,下面上AC代码:
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int n;
scanf("%d",&n); //标准输入
if(n*n%2==0){ //判断是否为偶数
for(int i=1,j=n*n;i<=j,j>=i;i++,j--) //设i和j为循环变量
cout<<i<<" "<<j<<"\n"; //输出
return 0; //完美结束
}
else { //判断是否为奇数
for(int i=1,j=n*n;i<j,j>i;i++,j--) //设i和j为循环变量
cout<<i<<" "<<j<<"\n"; //输出
cout<<n*n/2+1<<"\n"; //输出中间的数
return 0; //完美结束
}
}