19 条题解

  • 14
    @ 2023-6-25 8:19:26

    先看一下重点解析:

    #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
      @ 2023-6-24 15:09:44
      #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 (双精度实型)

      • @ 2023-6-25 8:14:39

        这位人士,除法算式除数和被除数只要一个是double类型结果就是double。

      • @ 2023-6-27 16:51:16

        @ 😄 感谢你指出我的错误哈👍 给你的题解点赞了👍

    • 2
      @ 2023-11-5 15:38:37

      二分查找(虽然现在有些麻烦,但是如果有时间限制会比较好用)

      #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
        @ 2023-6-23 22:03:07

        前面的

        #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;
        }
        
        • 2
          @ 2023-6-23 15:26:01

          解析

          Sn=112131nS_n = 1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n},求计算出一个最小的nn,使得SnkS_n>k

          首先编写循环计算SnS_n的值,因为问题中指出——要计算出一个最小的nn,使得SnkS_n>k,所以循环的条件就是Sn<=kS_n<=k,循环终止后,输出i1i-1即可。

          输出i1i-1的原因是,循环末尾i多自增了一次,需要把那次自增还原。

          题解

          #include <iostream>
          using namespace std;
          int main()
          {
              int k;
              double sum = 0;
              cin >> k;
              int i = 1;
              while (k >= sum)
              {
                  sum += 1.0 / i;
                  i++;
              }
              cout << i - 1;
              return 0;
          }
          
          • 0
            @ 2024-6-7 20:17:49

            题解 c++

            #include <bits/stdc++.h> //hetao4040809
            using namespace std;
            int main()
            {
                int k, n = 0;  
                cin >> k;
                double i = 1, s = 0;
                while (s <= k) 
                {
                    s += 1 / i; 
                    i++; 
                    n++; 
                }
                cout << n;
                return 0;
            }
            
            
            • 0
              @ 2024-5-24 17:13:51
              #include<iostream>
              #include<cstdio>
              #include<cmath>
              #include<iomanip>
              using namespace std;
              int main()
              {
                  int a,b,c;
                  cin >> a;
                  b = 1.0;
                  c = 0;
                  double d = 0.0;
                  while (d <= a)
                  {
                      d += 1.0 / b;
                      c += 1;
                      b += 1;
                  }
                  cout << c;
                  return 0;
              }
              
              • 0
                @ 2024-5-12 12:27:41
                #include <iostream>
                #include <iomanip>
                using namespace std;
                int main()
                {
                int n,v = 1;
                int z =0;          //计数器
                double m = 0;
                cin >> n;
                while (m<=n)      //判断数是否小于等于指定数
                {
                m += 1.0/v;
                v++;
                z += 1;           //次数+1
                }
                cout << z;
                return 0;
                }
                
                • 0
                  @ 2024-5-11 22:58:16

                  代码如下👀️

                  #include<iostream>
                  using namespace std;
                  int main()
                  {
                      int k,i=1;
                      cin >> k;
                      double s=0;
                      while(s<=k)
                      {
                          s += 1.0/i;
                          i++;
                      }
                      cout << i-1;
                      return 0;
                  }
                  

                  灰常简单 虽然我第一次做错了

                  • 0
                    @ 2024-4-12 21:29:45
                    #include<iostream>
                    using namespace std;
                    int main()
                    {
                        int k,n=1;
                        double sum=0;
                        cin >> k;
                        while(sum<=k)//当sum小于k时
                        {
                            sum+=1.0/n;//sum加n分之1
                            n+=1;//n加1
                        }
                        cout << n-1;//注意因为当sum大于k时,n仍加了1,所以这里要-1
                        return 0;
                    }
                    
                    • 0
                      @ 2023-10-18 22:06:11
                      #include <iostream>
                      using namespace std;
                      int main()
                      {
                          int a,y;
                          double q;
                          q = 0;
                          y = 1;
                          cin >> a;
                          while (a >= q)
                          {
                              q += (1.0 / y);
                              y++;
                          }
                          cout << (y - 1);
                          return 0;
                      }
                      
                      • 0
                        @ 2023-8-27 21:05:13

                        代码:image 看到没有人发二分查找的,那我就补充一下吧,如果大家在比赛中遇见答案有范围且数据大时间限制短的话可以参考一下这段代码,希望可以帮到大家

                        • 0
                          @ 2023-7-13 10:40:29

                          解析:

                          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
                            @ 2023-7-8 19:07:41

                            解析:

                            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
                              @ 2023-7-8 19:01:06

                              解析:

                              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;
                              }
                              
                              • 0
                                @ 2023-7-2 17:49:21
                                #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;
                                }
                                
                                • 0
                                  @ 2023-7-2 17:49:07
                                  #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;
                                  }
                                  
                                  • -1
                                    @ 2023-6-23 21:49:59

                                    先看题

                                    首先,由提示可得,将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;
                                    }
                                    
                                    • -2
                                      @ 2024-4-12 21:29:22

                                      #include<iostream> using namespace std; int main() { int k,n=1; double sum=0; cin >> k; while(sum<=k)//当sum小于k时 { sum+=1.0/n;//sum加n分之1 n+=1;//n加1 } cout << n-1;//注意因为当sum大于k时,n仍加了1,所以这里要-1 return 0; }

                                      
                                      
                                      • 1

                                      信息

                                      ID
                                      223
                                      时间
                                      1000ms
                                      内存
                                      128MiB
                                      难度
                                      7
                                      标签
                                      递交数
                                      3831
                                      已通过
                                      818
                                      上传者