计算1/2+2/3+3/5+5/8+8/13c语言
时间: 2023-11-05 09:11:21 浏览: 34
这道题目可以使用循环来求解,具体实现如下:
```c
#include <stdio.h>
int main() {
int i;
double a = 1, b = 2, c;
printf("%.2lf ", a / b); // 输出第一个数
for (i = 2; i <= 5; i++) { // 循环求解后面四个数
c = b;
b = a + b;
a = c;
printf("%.2lf ", b / a);
}
return 0;
}
```
运行结果为:0.50 0.67 0.60 0.62 0.62
相关问题
【提高】圣诞礼物gift(CZOI-2012-04)输入 复制 5 输出 复制 13c++代码
题目描述
现在又到了一年一度的圣诞节,珂朵莉想给自己的好友爱丽丝送一份礼物,她决定送一串十进制整数。
珂朵莉想她的礼物与众不同,这串整数应该是一个不重复的严格递增序列。她需要你的帮助,编写一个程序将一个给定范围内的递增序列分成若干份,使得每份序列长度相同,并且每份序列中的整数的和相等。
珂朵莉要求每份序列的长度最大,每份序列中的整数的和最小。特别是,当总的序列长度无法被平分或者根本没有满足条件的序列时,程序应该输出“Impossible” 。
输入格式
输入的第一行包含一个整数 $L$, 表示递增序列的长度 $(1 \leq L \leq 50000)$。
接下来是两个整数 $A,B$,描述了递增序列的范围,这个范围包含了从 $A$ 到 $B$ 中的所有递增整数。$(1 \leq A < B < 10^{12})$。
输出格式
如果能够平分成若干份,输出每份的长度以及每份中的整数和(每行一个)。
否则输出 “Impossible”(不含引号)。
题解
本题就是把 $A$ 到 $B$ 中的个数均分成 $L$ 组,每组数和最小。
由于 $A$ 到 $B$ 中的个数不大于 $50000$,
所以我们可以枚举每个分组中的最小数,
然后出第一个分组,然后让剩余的分组取最小的不重复的数值,
如果不行就回溯,把刚刚这个数从序列中删除即可。
做法并不难想,
由于是探索性质,
如果可以储存数值,就大大减少了枚举。
这里给出我的做法:
- 列举了状态的结构体:
struct state {
ll _s; //起始数
vector<ll> _seq; //序列
vector<ll> _cap; //每个分组的和
bool operator<(const state &r) const { return _s < r._s; }
};
map<state, bool> _visited;
- 按照长度升序和起始值升序排序
- 定义了一个小根堆用于储存这些状态,目的是使得将现在最短的路径优先尝试
- 在每次处理完新建的节点后继续在小根堆中选节点再处理,因此类似Djoiskra的最短路算法。
- 最后输出序列:
(只保留经过的序列会减少一些难以捉摸的错误)
因为最初的序列有 L 个,所以一定是每个序列 L 个合并的(既然有合并了就是分成 L 份并不是分成 n 份,不然就没有合并的必要)。
语言:C++,C,python3等
C++ 代码
【提高】圣诞礼物gift(CZOI-2012-04)输入 复制 5 输出 复制 13c++代码和方法
这道题是一道简单的找规律题。
首先,我们可以列出前几个数字:
1, 2, 4, 7, 11, ...
我们可以发现,第 $n$ 个数字等于前 $n-1$ 个数字的和再加上 $n$。
接下来,我们就可以使用简单的循环计算出所需要的数字了。
代码如下: