题目中有图和表格,所以就不把题目信息列出来了,打开链接直接看就行了。。。
分析:
从填幻方的过程,可以判断一下几点:
1>.幻方的每一列都是向下发展的;
2>.填入的前n个数都刚好是每一列第一个填入的数;
从这两点可以推出下面几点:
(1). 每一列的发展是平面的(即每一列的个数是一样的,特别的,只有一列少一);
(2). 右下角那个数肯定是填入的最大的;
(3). 当我们填入到右下角的时候,每一列的个数都刚好是n/2(注意n是奇数,这里的除是整除)
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int main()
{
long long n;
double m;
while(~scanf("%lld", &n) && n) {
if(n == 1) { puts("1"); continue; }
m = n;
printf("%0.0lf\n", (m*m+1)/2-(m+1)/2-1+0.1);
}
return 0;
}