11.乘方计算
给出一个整数a和一个正整数n(-1000000<=a<=1000000,1<=n<=100000),求乘方,即乘方的结果。最终结果的绝对值不超过1000000。
输入
一行,包含两个整数a和n(-1000000<=a<=1000000,1<=n<=100000),两个数之间以单个空格隔开
输出
一个整数,即乘方的结果。题目保证最终结果的绝对值不超过1,000,000
样例输入
2 3
样例输出
8
#include <iostream>
using namespace std;
int main() {
int a, n,sum = 1; //输入整数a与正整数n
cin >> a >> n;
for (int i = 1; i <= n; i++) {
sum *= a;
}
cout << sum << endl;
return 0;
}
12.人口增长
我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人?结果保留小数点后四位。
输入
一行,包含两个整数x和n(1<=x<=100,1<=n<=100)分别是人口的基数和年数,以单个空格分开
输出:
输出最后的人口数,以亿为单位,保留到小数点后四位
样例输入
13 10
样例输出
13.1306
#include <iostream>
using namespace std;
int main() {
int x, n; //x表示人数,n表示年份
cin >> x >> n;
double s = x; //s存储n年后的人口数,暂时初始化为当前人口数
for (int i = 1; i <= n; i++) {
s *= 1.001;
}
printf("%.4lf", s);
return 0;
}
13.斐波那契数
斐波那契额数列是指这样的数列:数列的第一个和第二个数都为1,接下来每个数都等于前面两个数之和。给出一个正整数k,要求斐波那契数列中第k个数是多少
输入
一行,包含一个正整数k (1<=k<=46)
输出
一行,包含一个正整数,表示斐波那契数列中第k个数的大小
样例输入
19
样例输出
4181
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int a, b, c, k, s;
scanf("%d", &k);
a = 1; b = 1;
for (int i = 3; i <= k; ++i) {
c = a + b; // 计算斐波那契数列的下一个数,即前两个数的和
a = b;// 更新a为前一个数
b = c;// 更新b为当前计算的数
}
printf("%d\n", b);
return 0;
}
在这段代码中,
c = a + b; a = b; b = c;
这三行代码实现了斐波那契数列中下一个数的计算和当前两个数的更新。这个过程是斐波那契数列计算的经典迭代方式。具体来说:
c = a + b;
:这行代码计算斐波那契数列中下一个数的值。a
和b
分别是当前要计算数的前两个数,它们的和就是下一个斐波那契数,这个值被存储在变量c
中。
a = b;
:这行代码将b
的值赋给a
。因为在下一次迭代中,a
需要成为当前的第二个数(即当前b
的值),以便和新的b
(即下一个斐波那契数)一起计算下一个斐波那契数。
b = c;
:这行代码将c
的值赋给b
。此时,c
中存储的是最新计算出的斐波那契数,这个数将成为下一次迭代中的第二个数(即当前的b
)。这样,每次循环迭代后,
a
和b
都更新为斐波那契数列中更靠后的两个数,直到循环结束,b
中存储的就是第k
个斐波那契数。这个迭代过程避免了递归带来的性能问题(特别是当
k
很大时),并且只需要常量级的额外空间来存储中间结果。因此,它是计算斐波那契数列的高效方法之一。
14.鸡尾酒疗法
鸡尾酒疗法,指“高效抗逆转录病毒治疗”。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方法进行。假设鸡尾酒疗法的有效率为x,新疗法的有效率为y,如果y-x大于%5,则效果更好,如果x-y大于%5,则效果更差,否则称为效果差不多。下面给出n组临床对照试验,其中第一组采用鸡尾酒疗法,其他n-1组为各种不同的改进疗法,请写程序判定各种改进疗法效果如何。
输入:
第一行为整数n(1<n<=20) ;其余n行每行两个整数,第一个整数是临床试验的总病数列(小于等于10,000),第二个疗效有效的病例数,这n行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。
输出:
有n-1行,分别表示对应改进疗法的效果,如果效果更好,输出better;如果效果更差,输出worse,否则输出same
样例输入
5
125 99
112 89
145 99
99 97
123 98
样例输出
same
worse
better
same
#include <iostream>
using namespace std;
int main() {
long a, b, n;
double x, y;
scanf("%ld", &n);
scanf("%ld%ld", &a, &b);
x = b/(a / 1.0); //x存储原鸡尾酒疗法的有效率
for (int i = 2; i <= n; i++) {
scanf("%ld%ld", &a, &b);
y = b / (a / 1.0); //y存储第i种改进疗法的有效率
if (y - x > 0.05)printf("better");
else if (x - y > 0.05)printf("worse");
else printf("same"); //判断第i种改进疗法与原鸡尾酒疗法的差距
}
return 0;
}
15.救援
救生船从大本营出发,营救若干屋顶上的人回到大本营,屋顶数目及每个屋顶的坐标和人数都将由输入决定,求出所有人都到达大本营并登录所用的时间。
直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营,坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度50米/分钟驶向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船分钟,船原路返回,达到大本营,每人下船0.5分钟,假设原点与任意一个屋顶的连线不穿过其他屋顶
输入
第一行,一个整数,表示屋顶数n,接下来依次有n行输入,每一行种包含两个表示屋顶相对于大本营的平面坐标位置的实数(单位是米)、一个表示人数的整数
输出
救援需要的总时间,精确到分钟(向上取整)
样例输入
1
30 40 3
样例输出
7
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a, b, s = 0, n, c, l; //s存储救援需要的总时间,初始值为0
scanf("%lf", &n);
for (int i = 1; i <= n; ++i) { //循环每一个屋顶
scanf("%lf%lf%lf", &a, &b, &c); //输入坐标和人数
l = sqrt(1.0 * (a * a) + 1.0 * (b * b)); //这是因为根据勾股定理,直角三角形的斜边长度等于其两直角边的平方和的平方根。
s = s + 2 * l / 50.0 + c * 1.5; //s累计救援这个屋顶所需要的时间
}
printf("%.0lf\n", ceil(s));
return 0;
}