 编写一个程序,求满足以下条件 n 的最大值: 1^1+2^2+2^3+…+2^n

时间:2021-10-01 14:48:08
  编写一个程序,求满足以下条件 n 的最大值:  1^1+2^2+2^3+…+2^n<1000
    用数学方法我会做,编程有点问题!!
   规定要用while循环做啊!
        还有要加载一个函数乘方的!
  

43 个解决方案

#1


我晕死,不就是求一个级数码?你没学过高等数学?

#2


这个很难吗?
你自己都说出来了……

#3


   不会就不要发言!!!!!
      我晕!!!
   呵呵!!!
   没有学过高等数学!
    只学过高中数学!!
   

#4


  好难好难啊!!
     我都快悲剧死了!
  呵呵!!!!
    送分的类!!
 

#5


  怎么还没有人给我答案啊!!
     急!!!!

#6



  #include <stdio.h>
  #include <math.h>
  
  int main()
  {
      int n=2;
      int sum=1;
      while(sum<1000)
      {
          sum+=pow(2,n);
          n++;
      }
      n--;
      printf("满足条件的最大n值为: %d\n",n);
      system("pause");
      return 0;
  }

#7



#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
     int fun(int);
     int i=2,num=1;
     while(i<10){
          num += fun(i);
          if(num>1000){
               num -= fun(i);
               break;
          }
          i++;
      }
    cout<<i;

    return 0;
}
int fun(int x){
    return pow(2.0,x);
}

写的不好,刚好符合你的要求……

#8


楼上各位写的代码说实话,本人看不上

#9


引用 7 楼 s_zxing 的回复:
C/C++ code

#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
     int fun(int);
     int i=2,num=1;
     while(i<10){
          num += fun(i);
          if(num……


呵呵你还上递归。。。不是坑人。

#10


建议楼主用位操作,省了调用库函数的时间浪费....

#11


引用 8 楼 qinqijing_123 的回复:
楼上各位写的代码说实话,本人看不上

看你的。

#12


提示::用等比数列推算,发现规则,然后用位操作实现....

#13


如果“编程有点问题”,就把你已经完成的代码贴出来,告诉大家你遇到的是什么问题,让别人帮助你解决。上来就要代码是不好的习惯,让人觉得你自己没有做任何思考。

#14


引用 13 楼 iambic 的回复:
如果“编程有点问题”,就把你已经完成的代码贴出来,告诉大家你遇到的是什么问题,让别人帮助你解决。上来就要代码是不好的习惯,让人觉得你自己没有做任何思考。


---------------------
答案也给了,建议也给了,我就只能+1了

#15


引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....


我试试。。。

#16


引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

听君一席话,胜读十年书啊。

另外两个的代码当程序跑到 2^31的时候 你看结果是多少。呵呵。
要完成这个程序还要自己写个 大数据 来存放数据。
还不会写 大数据 那位大哥写个我学习学习。

位运算的方法。

#include <stdio.h>
#include <stdlib.h>
#define N 100
int main(int argc,char **argv)
{
    int i = 1,sum = 1,n = 2,k = 1;

    printf("%d^%d = %d  %d\n",sum,sum,sum,k);
    while (n < N)
    {
    k += sum = i << n;
    printf("%d^%d = %d   %d\n",i+1,n++,sum,k);
    }

    return 0;
}



#17


俺把题目给看错了。看成是n<1000了。。。。

#18


引用 16 楼 saishow 的回复:
引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

听君一席话,胜读十年书啊。

另外两个的代码当程序跑到 2^31的时候 你看结果是多少。呵呵。
要完成这个程序还要自己写个 大数据 来存放数据。
还不会写 大数据 那位大哥写个我学习学习。

位运算的方法。

C/C++ code

#include <st……

好方法

#19


不过,人家的和<1000,不是n<1000
哈哈

#20


借花献佛~哈哈

#include <stdio.h>
#include <stdlib.h>
#define N 1000
int main(int argc,char **argv)
{
    int i = 1,sum = 1,n = 2,k = 1;

    printf("%d^%d = %d  %d\n",sum,sum,sum,k);
    while (k < N)
    {
    k += sum = i << n;
    printf("%d^%d = %d   %d\n",i+1,n++,sum,k);
    }
    printf("the number is ::::%d\n",n-1);
    return 0;
}

#21


位移运算最好   那个就是 2^(n+1) - 1  直接左移n+1位 -1  就好了

#22


...
就是2进制每次高位变1

#23


1^1+2^2+2^3+…+2^n<1000
还是
2^1+2^2+2^3+…+2^n<1000

#24


引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

如用等比数列何不干脆用求和工式,1^1+2^2+2^3+…+2^n=1+2^(n+1)-2^2=2^(n+1)-3。

#25


引用 24 楼 wizard_tiger 的回复:
引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

如用等比数列何不干脆用求和工式,1^1+2^2+2^3+…+2^n=1+2^(n+1)-2^2=2^(n+1)-3。

哈~这让我想起了一句话~~“程序员能做的事,尽量不要让计算机做”~
up用公式~

#26


引用 23 楼 mymtom 的回复:
1^1+2^2+2^3+…+2^n<1000
还是
2^1+2^2+2^3+…+2^n<1000


应该是2^1+2^2+2^3+…+2^n<1000吧
   //...
    int n = 1,sum = 0;
    while(sum<1000)
   {
       sum += (int)pow(2,n++);
   }
   n--;
   sum -= pow(2,n);
   //...

#27


引用楼主 eaqle 的回复:
  编写一个程序,求满足以下条件 n 的最大值:  1^1+2^2+2^3+…+2^n<1000
    用数学方法我会做,编程有点问题!!
   规定要用while循环做啊!
        还有要加载一个函数乘方的!



int x=0,n=2;
while(x>=1000-1))
{
    x+=(1<<n);
    n++;       
}

加while循环只能这样了吧,不过用位运算+数学方法是最好的

#28


引用 25 楼 kid_coder 的回复:
引用 24 楼 wizard_tiger 的回复:
引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

如用等比数列何不干脆用求和工式,1^1+2^2+2^3+…+2^n=1+2^(n+1)-2^2=2^(n+1)-3。

哈~这让我想起了一句话~~“程序员能做的事,尽量不要让计算机做”~
up用公式~


程序员能做,那就口算,n=9对不对?
2^2+2^3+…+2^n用二进制加,一位对一位没有一个有进位,每位都是 1 。1023等于1111111111 (10个1),大于1000,在前面减个1,就是111111111,n=9.看到前面是1^1+2^2+……没有2^1,所以最后的和为111111101(二进制)。

#29


学习了,没有想到位运算……

#30


可以看成是二进制转十进制的问题呀

#31


#include <stdio.h>

int sum;

void q(int i)
{
   if (sum > 1000)
   {
    printf("%d\n", i - 1);

return ;
   }

   ++i;

   sum += i * i;

   q(i);

}

int main()
{
q(0);
}

#32


上面严重看错题目了  

#include <stdio.h>
#include <math.h>

int main()
{
int sum = 1, i = 2;

while (sum < 1000)
{
sum += pow(2, i++);
}

    printf("%d\n", i);

}

#33


printf("%d\n", i - 1);

#34


学习了,原来位运算还有如此应用

#35


#define N 1000

void main()
{
    int i,n=1;
    for(i=0;n<N+2;i++)
    {
        n=(n<<1|1);
    }
    printf("%d",--i);
}

#36


#define N 1000

void main()
{
    int i,n=1;
    for(i=0;n<N+2;i++)
        n=(n<<1|1);
    printf("%d",--i);
}

够简短了吧?

#37


LS你自己试过结果没有

#38


引用 37 楼 qq1989888 的回复:
LS你自己试过结果没有


试过,结果是8。
你也可以改N的值试试。

#39



#include <stdio.h>
#include <math.h>

void main()
{
int n = 1,sum = 0;
while(sum<1000)
{
sum+=(int)pow(2,n++);
}
printf("满足条件的最大n值为: %d\n",--n);
}

#40



int main(){
        int sum=0;
        int start=2;
        int count=1;
        while(sum+1<1000){
                start=start<<1;
                sum+=sum+start;
                count++;
        }
        printf("count:%d\n",count);
        return 0;
}

#41



int main(){
        int sum=0;
        int start=2;
        int count=0;
        while(sum+1<1000){
                start=start<<1;
                sum=sum+start;
                count++;
        }
        printf("count:%d\n",count);
        return 0;
}

#42


n=9

#43


对哦……底数是2哦……如果换别的呢?

#1


我晕死,不就是求一个级数码?你没学过高等数学?

#2


这个很难吗?
你自己都说出来了……

#3


   不会就不要发言!!!!!
      我晕!!!
   呵呵!!!
   没有学过高等数学!
    只学过高中数学!!
   

#4


  好难好难啊!!
     我都快悲剧死了!
  呵呵!!!!
    送分的类!!
 

#5


  怎么还没有人给我答案啊!!
     急!!!!

#6



  #include <stdio.h>
  #include <math.h>
  
  int main()
  {
      int n=2;
      int sum=1;
      while(sum<1000)
      {
          sum+=pow(2,n);
          n++;
      }
      n--;
      printf("满足条件的最大n值为: %d\n",n);
      system("pause");
      return 0;
  }

#7



#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
     int fun(int);
     int i=2,num=1;
     while(i<10){
          num += fun(i);
          if(num>1000){
               num -= fun(i);
               break;
          }
          i++;
      }
    cout<<i;

    return 0;
}
int fun(int x){
    return pow(2.0,x);
}

写的不好,刚好符合你的要求……

#8


楼上各位写的代码说实话,本人看不上

#9


引用 7 楼 s_zxing 的回复:
C/C++ code

#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
     int fun(int);
     int i=2,num=1;
     while(i<10){
          num += fun(i);
          if(num……


呵呵你还上递归。。。不是坑人。

#10


建议楼主用位操作,省了调用库函数的时间浪费....

#11


引用 8 楼 qinqijing_123 的回复:
楼上各位写的代码说实话,本人看不上

看你的。

#12


提示::用等比数列推算,发现规则,然后用位操作实现....

#13


如果“编程有点问题”,就把你已经完成的代码贴出来,告诉大家你遇到的是什么问题,让别人帮助你解决。上来就要代码是不好的习惯,让人觉得你自己没有做任何思考。

#14


引用 13 楼 iambic 的回复:
如果“编程有点问题”,就把你已经完成的代码贴出来,告诉大家你遇到的是什么问题,让别人帮助你解决。上来就要代码是不好的习惯,让人觉得你自己没有做任何思考。


---------------------
答案也给了,建议也给了,我就只能+1了

#15


引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....


我试试。。。

#16


引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

听君一席话,胜读十年书啊。

另外两个的代码当程序跑到 2^31的时候 你看结果是多少。呵呵。
要完成这个程序还要自己写个 大数据 来存放数据。
还不会写 大数据 那位大哥写个我学习学习。

位运算的方法。

#include <stdio.h>
#include <stdlib.h>
#define N 100
int main(int argc,char **argv)
{
    int i = 1,sum = 1,n = 2,k = 1;

    printf("%d^%d = %d  %d\n",sum,sum,sum,k);
    while (n < N)
    {
    k += sum = i << n;
    printf("%d^%d = %d   %d\n",i+1,n++,sum,k);
    }

    return 0;
}



#17


俺把题目给看错了。看成是n<1000了。。。。

#18


引用 16 楼 saishow 的回复:
引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

听君一席话,胜读十年书啊。

另外两个的代码当程序跑到 2^31的时候 你看结果是多少。呵呵。
要完成这个程序还要自己写个 大数据 来存放数据。
还不会写 大数据 那位大哥写个我学习学习。

位运算的方法。

C/C++ code

#include <st……

好方法

#19


不过,人家的和<1000,不是n<1000
哈哈

#20


借花献佛~哈哈

#include <stdio.h>
#include <stdlib.h>
#define N 1000
int main(int argc,char **argv)
{
    int i = 1,sum = 1,n = 2,k = 1;

    printf("%d^%d = %d  %d\n",sum,sum,sum,k);
    while (k < N)
    {
    k += sum = i << n;
    printf("%d^%d = %d   %d\n",i+1,n++,sum,k);
    }
    printf("the number is ::::%d\n",n-1);
    return 0;
}

#21


位移运算最好   那个就是 2^(n+1) - 1  直接左移n+1位 -1  就好了

#22


...
就是2进制每次高位变1

#23


1^1+2^2+2^3+…+2^n<1000
还是
2^1+2^2+2^3+…+2^n<1000

#24


引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

如用等比数列何不干脆用求和工式,1^1+2^2+2^3+…+2^n=1+2^(n+1)-2^2=2^(n+1)-3。

#25


引用 24 楼 wizard_tiger 的回复:
引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

如用等比数列何不干脆用求和工式,1^1+2^2+2^3+…+2^n=1+2^(n+1)-2^2=2^(n+1)-3。

哈~这让我想起了一句话~~“程序员能做的事,尽量不要让计算机做”~
up用公式~

#26


引用 23 楼 mymtom 的回复:
1^1+2^2+2^3+…+2^n<1000
还是
2^1+2^2+2^3+…+2^n<1000


应该是2^1+2^2+2^3+…+2^n<1000吧
   //...
    int n = 1,sum = 0;
    while(sum<1000)
   {
       sum += (int)pow(2,n++);
   }
   n--;
   sum -= pow(2,n);
   //...

#27


引用楼主 eaqle 的回复:
  编写一个程序,求满足以下条件 n 的最大值:  1^1+2^2+2^3+…+2^n<1000
    用数学方法我会做,编程有点问题!!
   规定要用while循环做啊!
        还有要加载一个函数乘方的!



int x=0,n=2;
while(x>=1000-1))
{
    x+=(1<<n);
    n++;       
}

加while循环只能这样了吧,不过用位运算+数学方法是最好的

#28


引用 25 楼 kid_coder 的回复:
引用 24 楼 wizard_tiger 的回复:
引用 12 楼 qinqijing_123 的回复:
提示::用等比数列推算,发现规则,然后用位操作实现....

如用等比数列何不干脆用求和工式,1^1+2^2+2^3+…+2^n=1+2^(n+1)-2^2=2^(n+1)-3。

哈~这让我想起了一句话~~“程序员能做的事,尽量不要让计算机做”~
up用公式~


程序员能做,那就口算,n=9对不对?
2^2+2^3+…+2^n用二进制加,一位对一位没有一个有进位,每位都是 1 。1023等于1111111111 (10个1),大于1000,在前面减个1,就是111111111,n=9.看到前面是1^1+2^2+……没有2^1,所以最后的和为111111101(二进制)。

#29


学习了,没有想到位运算……

#30


可以看成是二进制转十进制的问题呀

#31


#include <stdio.h>

int sum;

void q(int i)
{
   if (sum > 1000)
   {
    printf("%d\n", i - 1);

return ;
   }

   ++i;

   sum += i * i;

   q(i);

}

int main()
{
q(0);
}

#32


上面严重看错题目了  

#include <stdio.h>
#include <math.h>

int main()
{
int sum = 1, i = 2;

while (sum < 1000)
{
sum += pow(2, i++);
}

    printf("%d\n", i);

}

#33


printf("%d\n", i - 1);

#34


学习了,原来位运算还有如此应用

#35


#define N 1000

void main()
{
    int i,n=1;
    for(i=0;n<N+2;i++)
    {
        n=(n<<1|1);
    }
    printf("%d",--i);
}

#36


#define N 1000

void main()
{
    int i,n=1;
    for(i=0;n<N+2;i++)
        n=(n<<1|1);
    printf("%d",--i);
}

够简短了吧?

#37


LS你自己试过结果没有

#38


引用 37 楼 qq1989888 的回复:
LS你自己试过结果没有


试过,结果是8。
你也可以改N的值试试。

#39



#include <stdio.h>
#include <math.h>

void main()
{
int n = 1,sum = 0;
while(sum<1000)
{
sum+=(int)pow(2,n++);
}
printf("满足条件的最大n值为: %d\n",--n);
}

#40



int main(){
        int sum=0;
        int start=2;
        int count=1;
        while(sum+1<1000){
                start=start<<1;
                sum+=sum+start;
                count++;
        }
        printf("count:%d\n",count);
        return 0;
}

#41



int main(){
        int sum=0;
        int start=2;
        int count=0;
        while(sum+1<1000){
                start=start<<1;
                sum=sum+start;
                count++;
        }
        printf("count:%d\n",count);
        return 0;
}

#42


n=9

#43


对哦……底数是2哦……如果换别的呢?