19 条题解
-
14
先看一下重点解析:
#include <iostream> using namespace std; int main() { int k, n = 0; cin >> k; double i = 1, sn = 0; //跟上一题如出一辙,他们俩要double类型; while (sn <= k) { sn += 1 / i; // 1 = 1 / 1; i++; n++; // sn加一次,n加一次1(因为n是几sn就要加几次); } cout << n; // 别忘记输出呕~; return 0; }
此外呢,sn > k 就结束,所以循环条件得是sn <= k; (我刚开始就
错对了)如果对你有帮助,不能吝啬👍
恭祝全球华人端午快乐!
-
5
#include <iostream> using namespace std; int main() { int a,w; double q; q = 0; w = 1; cin >> a; while (a >= q) { q += (1.0 / w); w++; } cout << (w - 1); return 0; }
解析:
1.定义循环变量 w ,输入变量 a ,以及统计变量 q。
2.因为循坏次数不确定,所以用 while 循环,条件为 输入变量 a 大于等于 统计变量 q 。
3.众所周知,分数可以改写为除法算式(如:X / Y)所以我们用 q 加上 1.0 / a。
注意!!!要写 1.0 而不是 1,这俩
老六玩意儿不一样,因为算式结果会自动转化为更复杂的数值的数据类型。1 / 2 答案会是 0 ,(转化为整数了) 1.0 / 2 答案就会是 0.5 了。(如果我记得没错,如果有错欢迎各位指出)4.循环变量 w 要自增 1 ,不然循环就死了。
5.因为逻辑是:比较,加分数,自增。所以会出现在加分数就已经满足要求却又自增的情况,我们就需要把多的一次自增回溯。( w - 1)
6.输出。(把 w - 1 写在输出里真是泰裤辣)
7.看到这里就点个赞吧!👍
(我输入法都知道我接下来要说什么了)
提示:
简单到复杂的数据类型分别为(举例):
char / short (字符型 / 短整型) -> int / long long (整形) -> float (单精度实性) -> double (双精度实型)
-
2
二分查找(虽然现在有些麻烦,但是如果有时间限制会比较好用)
#include <bits/stdc++.h> using namespace std; int k; bool check(int x)//判断条件是否成立。 { double a=0; for(int i=1;i<=x;i++) { a+=1.0/i; } if(a>=k) return false; return true; } int main() { cin>>k; int l=0;//左边界。 int r=100000000;//右边界。 int ans; while(r>=l)//二分过程。 { int mid=(r+l)/2; if(!(check(mid))) { ans=mid; r=mid-1; } else { l=mid+1; } } cout<<ans;//输出。 return 0; }
-
2
前面的
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int i = 1; double sum = 0; while (i <= n) { sum += 1.0 / i; i++; } printf ("%.3lf",sum); return 0; }
改一下
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int i = 1; double sum = 0; while (sum < n) { sum += 1.0 / i; i++; } cout << i - 1; return 0; }
-
0
解析:
1.定义循环变量 i ,输入变量 k,以及统计变量 sum。
2.因为循坏次数不确定,所以用 while 循环,条件为sum <= k 统计求和。
3.众所周知,分数可以改写为除法算式(如:X / Y)所以我们用 i 加上 1.0 / i。
注意!!!要写 1.0 而不是 1,这俩~老六~😕 😕 东东不一样,因为算式结果会自动转化为更复杂的数值的数据类型。1 / 2 答案会是 0 ,(转化为整数了) 1.0 / 2 答案就会是 0.5 了。(如果我记得没错,如果有错欢迎各位指出)
4.循环变量 i 要自增 1 ,不然循环就死了。
5.因为逻辑是:比较,加分数,自增。所以会出现在加分数就已经满足要求却又自增的情况,我们就需要把多的一次自增回溯。( w - 1)
6.输出。(把 i - 1 写在输出里真是**泰裤辣!!!👀️ **)
7.看到这里就点“亿”赞吧!👍 🎉️ 🎉️ 😄 😄 ❤️ 😄 😄 🎉️ 🎉️
#include <iostream> #include <cstdio> //导入cstdio库 using namespace std; int main() { int i = 1,k; //定义i,n。 double sum = 0; cin >> k; while (sum <= k) //while循环。 { sum += 1.0/i; i++; } printf ("%d",i-1); //打印出来 return 0; }
-
0
解析:
1.定义循环变量 i ,输入变量 k,以及统计变量 sum。
2.因为循坏次数不确定,所以用 while 循环,条件为sum <= k 统计求和。
3.众所周知,分数可以改写为除法算式(如:X / Y)所以我们用 i 加上 1.0 / i。
注意!!!要写 1.0 而不是 1,这俩~老六~玩意儿不一样,因为算式结果会自动转化为更复杂的数值的数据类型。1 / 2 答案会是 0 ,(转化为整数了) 1.0 / 2 答案就会是 0.5 了。(如果我记得没错,如果有错欢迎各位指出)
4.循环变量 i 要自增 1 ,不然循环就死了。
5.因为逻辑是:比较,加分数,自增。所以会出现在加分数就已经满足要求却又自增的情况,我们就需要把多的一次自增回溯。( w - 1)
6.输出。(把 i - 1 写在输出里真是泰裤辣)
7.看到这里就点个赞吧!👍 🎉️ 🎉️ 😄 😄 ❤️ 😄 😄 🎉️ 🎉️
#include <iostream> #include <cstdio> //导入cstdio库 using namespace std; int main() { int i = 1,k; //定义i,n。 double sum = 0; cin >> k; while (sum <= k) //while循环。 { sum += 1.0/i; i++; } printf ("%d",i-1); //打印出来 return 0; }
-
0
解析:
1.定义循环变量 i ,输入变量 k,以及统计变量 sum。
2.因为循坏次数不确定,所以用 while 循环,条件为sum <= k 统计求和。
3.众所周知,分数可以改写为除法算式(如:X / Y)所以我们用 i 加上 1.0 / i。
注意!!!要写 1.0 而不是 1,这俩~老六~玩意儿不一样,因为算式结果会自动转化为更复杂的数值的数据类型。1 / 2 答案会是 0 ,(转化为整数了) 1.0 / 2 答案就会是 0.5 了。(如果我记得没错,如果有错欢迎各位指出)
4.循环变量 w 要自增 1 ,不然循环就死了。
5.因为逻辑是:比较,加分数,自增。所以会出现在加分数就已经满足要求却又自增的情况,我们就需要把多的一次自增回溯。( w - 1)
6.输出。(把 w - 1 写在输出里真是泰裤辣)
7.看到这里就点个赞吧!👍
(我输入法都知道我接下来要说什么了)
提示:
简单到复杂的数据类型分别为(举例):
char / short (字符型 / 短整型) -> int / long long (整形) -> float (单精度实性) -> double (双精度实型)
#include <iostream> #include <cstdio> //导入cstdio库 using namespace std; int main() { int i = 1,k; //定义i,k。 double sum = 0; cin >> k; while (sum <= k) //while循环。 { sum += 1.0/i; i++; } printf ("%d",i-1); //打印出来 return 0; }
-
-1
先看题
首先,由提示可得,将k设为int类型是完全够的,因为在这道题中,我们并不知道循环次数,所以我们需要使用whlie循环并在循环体内进行自增来实现枚举的功能,当sum不小于k时,输出n。注意这里sum要设为double类型以防小数位数过多,且最后输出时n要-1。
为什么要输出n - 1:
因为在最后一次循环中,sum+=1.0/n以后,n进行了一次自增,但这次自增并没有被算到sum里面去,所以要将其-1
#include <iostream> #include <iomanip> using namespace std; int main() { int k,n = 1; double sum = 0; cin >> k; while (sum <= k) { sum += 1.0 / n; n++; } cout << n - 1; return 0; }
- 1
信息
- ID
- 223
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 3831
- 已通过
- 818
- 上传者