A.Calculating Function

joker_zh53發表於2020-11-14

A. Calculating Function
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
For a positive integer n let’s define a function f:

f(n) =  - 1 + 2 - 3 + … + [( - 1)^n]*n

Your task is to calculate f(n) for a given integer n.

Input
The single line contains the positive integer n (1 ≤ n ≤ 1015).

Output
Print f(n) in a single line.

Examples
inputCopy
4
outputCopy
2
inputCopy
5
outputCopy
-3
Note
f(4) =  - 1 + 2 - 3 + 4 = 2

f(5) =  - 1 + 2 - 3 + 4 - 5 = -3

本題目很簡單,只不過需要注意的是n的取值範圍,n 的範圍很大,本題需要開long long。
用迴圈做的話,在n的範圍很小的時候可以使用,但是本題的n的範圍很大,所以我們要麼是找規律,要麼縮減問題規模,很明顯是找規律,先去找偶數的規律,永遠是所給n值的一半,可先假設,再進行數學歸納法,奇數可根據偶數的規律求解。
n是偶數,f=n/2,n是奇數,f=(n-1)/2-n
在n的範圍很小的時候的程式碼段:

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
int sum=0;
int flag=-1;
cin>>n;
for(int i=1;i<=n;i++)
{
sum+=iflag;
flag=flag
(-1);
}
cout<<sum<<endl;
// system(“pause”);
}
本題的程式碼段:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
scanf("%lld",&n);
if(n&1)
printf("%lld\n",(n-1)/2-n);
else
printf("%lld\n",n/2);
}
注意:數要開long long!!!!!!

相關文章