第一章 顺序结构练习
❥(^_-) 第一题 等差数列求和
1.已知等差数列的首项为a,尾项为b,公差为d,求该数列的和。(0<a,b,d<1E18)
输入格式:第一行输入3个整数分别表示首项a、尾项b和公差d。
输出格式:只有一个数字,表示该数列的和。
输入样例1:
1 100 1
输出样例1:
5050
输入样例2:
12 123456789123456789 3
输出样例2:
1283695871347673282
思路: 本题的数据比较大,已经超出了int的范围,所以此处数据类型需要定义成long long的类型。需要注意的是电脑CPU运算的次数大概在5 * 108左右,而此处的数据已经达到了1 *1018,所以循环是无法解决的。此处快速的方法是使用等差数列求和的高斯公式。
代码:
#include <stdio.h>
int main()
{
long long int a, b, d, s, n; // s表示和,n表示数列的项数
scanf("%lld%lld%lld", &a, &b, &d);
n = (b - a) / d + 1; // 求出项数
s = (a + b) * n / 2; // 高斯公式求和
printf("%lld", s);
return 0;
}
❥(^_-)第二题 两点间距离
2.给定两个点P1和P2,计算P1与P2两点之间的距离d。
输入格式:一共两行,每行包含两个浮点数,表示一个点的坐标。
输出格式:一个浮点数,表示两点间的距离d,保留四位小数。
输入样例1:
1.0 7.0
5.0 9.0
输出样例1:
4.4721
输入样例2:
0 0
1 1
输出样例2:
1.4142
思路: 直接使用两点间的距离公式即可。
d
=
(
x
2
−
x
1
)
2
+
(
y
2
−
y
1
)
2
d= \sqrt[]{(x_2-x_1)^2+(y_2-y_1)^2}
d=(x2−x1)2+(y2−y1)2
代码:
#include <stdio.h>
#include <math.h>
int main()
{
double x1, x2, y1, y2, d; // 定义两点坐标以及距离d
scanf("%lf%lf", &x1, &y1);
scanf("%lf%lf", &x2, &y2);
d = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)); // 距离公式
printf("%.4f", d);
return 0;
}