摆方格
- 描述
-
给你一个n*n的方格,每个方格里的数必须连续摆放如
1
2
4
3
,下图为不连续的,请输出从左上角到右下角的对角线上的最大和
1
3
4
2
- 输入
- 输入包含多组测试数据。
每一行包括一个数据n,表示n*n的方格(保证所有数据在2^64范围内且n>0) - 输出
- 每行输出占一行,输出最大的对角线之和。
- 样例输入
-
1
-
2
-
3
- 样例输出
-
1
-
6
-
19
-
数学公式法
-
- #include<stdio.h>
- int main(){
- long long n,m,i,j; //根据题意要求定义long long
- while(~scanf("%lld",&n))
- {
- long long k=n-1,M=n*n;
- printf("%l64d\n",k*M-k*(k-1)+n*n/2-n+2); //这个公式现在我看不懂
- }
- return 0;
- }
-
- 模拟法 //
-
- #include<iostream>
- #include<string.h>
- #include<algorithm>
- #include<cstdio>
- using namespace std;
- int main()
- {
- long long n;
- while(cin>>n)
- {
- long long k=n*n;
- long long sum=0;
- for(int i=0; i<n-1; i++)
- {
- sum+=k;
- k-=2;
- }
- k/=2;
- sum+=k;
- cout<<sum+1<<endl;
- }
- return 0;
- }
-
-
- 这是我写的代码虽然数据类型可能错了但是,但是我感觉思路应该没出错
- #include<stdio.h> int main() { long long i; while(~scanf("%lld",&i)) { long long n=i*i; long long sum=0; for(long long j=0 ; j<i ; j++) { n-=2*j; sum+=n; } printf("%l64d\n",sum); } return 0; }
现在我开始发现acm这条路真的不好走,我现在关注的问题还是如何把代码写出来,可是acm真正的难点在于算法
加油