您的位置:首页 > 其它

POJ 2924 Gauß in Elementary School(我的水题之路——n到m的连和)

2012-02-13 14:50 260 查看
Gauß in Elementary School

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 7873Accepted: 3530
Description

Johann Carl Friedrich Gauß (1777 – 1855) was one of the most important German mathematicians. For those of you who remember the Deutsche Mark, a picture of him was printed on the 10 – DM bill. In elementary school, his teacher J. G. Büttner tried to occupy
the pupils by making them add up the integers from 1 to 100. The young Gauß surprised everybody by producing the correct answers (5050) within seconds.

Can you write a computer program that can compute such sums really quickly?

Given two integers n and m, you should compute the sum of all the integers from n to m. In other words, you should compute



Input

The first line contains the number of scenarios. Each scenario consists of a line containing the numbers n and m (−109 ≤ n ≤ m ≤ 109).

Output

The output for every scenario begins with a line containing “Scenario #i:”, where i is the number of the scenario starting at 1. Then print the sum of all integers from n to m. Terminate the output for
the scenario with a blank line.

Sample Input
3
1 100
-11 10
-89173 938749341


Sample Output
Scenario #1:
5050

Scenario #2:
-11

Scenario #3:
440625159107385260


Source

TUD Programming Contest 2006, Darmstadt, Germany

求从n到m的所有元素之和。

用__int64,套用连和公式:

sum = (n+m) * (m - n) / 2;

注意点:

1)输入输出格式%I64d。

2)n、m也要用__int64类型。

代码(1AC):

#include <cstdio>
#include <cstdlib>
#include <cstring>

int main(void){
int ii, casenum;
__int64 n, m, i;
__int64 sum;

scanf("%d", &casenum);
for (ii = 1; ii <= casenum; ii++){
scanf("%I64d%I64d", &n, &m);
if (n > m){
i = m;
m = n;
n = i;
}
sum = (n + m) * (m - n + 1) / 2;
printf("Scenario #%d:\n%I64d\n\n", ii, sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: