qiyadeng

          專注于Java示例及教程
          posts - 84, comments - 152, trackbacks - 0, articles - 34

          表正整數n為連續整數的條件和方法

          Posted on 2009-01-19 16:37 qiyadeng 閱讀(1928) 評論(3)  編輯  收藏

          今天看到關于一個整數表示為n個連續整數和的問題。搜索了下找到如下文章:

          表為連續正整數
          View SlideShare document or Upload your own.

          還搜索到程序的實現:http://blog.csdn.net/Solstice/archive/2006/09/13/1217700.aspx

          http://squall.cs.ntou.edu.tw/cprog/Assignments/99Fall/FindGivenSum.html

          http://blog.chinaunix.net/u2/76292/showart_1359876.html(這個是不正確的)

           

          我也簡單的實現了下:(g++編譯,主要思路是利用等差數列求和公式n=(a+a+k)*(k+2)/2列舉k,找到合適的a)

          #include <iostream>
          #include <math.h>
          using namespace std;
          
          int main(){
          
              int n;
              cout<<"input n:"<<endl;
              cin>>n;
          
              int maxk=(int)sqrt((double)n*2);
          
              int flag = 0;
          
              //cout<<"maxk="<<maxk<<endl;
          
              //for(int i=1;i<maxk+1;i++){
              for(int i=maxk+1;i>0;i--){
                   double a = n/(double)(i+1)-i/(double)2;
                  //cout<<"a="<<a<<endl;
              
                  if(a>0&&a-(int)a==0){
                      //cout<<i<<endl;
                      for(int j=0;j<i+1;j++){
                          cout<<a+j<<" ";
                      }
                      cout<<endl;
                      flag=1;
                  }
          
              }
              if(flag==0){
                  cout<<"NONE"<<endl;
              }
              return 0;
          
          }
          
          

          Feedback

          # re: 表正整數n為連續整數的條件和方法  回復  更多評論   

          2009-01-19 23:51 by 墻頭草
          不錯哦~~~~~




          =================================================================
          Struts2的零配置
          Struts2利用stream直接輸出Excel
          Struts2結合dhtmlx tree
          Struts2中ZeroConfig和CodeBehind下的Stream類型返回
          struts中html:select標簽和html:options 的使用

          更多Struts

          # re: 表正整數n為連續整數的條件和方法  回復  更多評論   

          2009-01-22 10:45 by appu
          good.
          實現倒是不難, 關鍵是怎么樣讓它執行次數最少,至少是比較少。

          # re: 表正整數n為連續整數的條件和方法  回復  更多評論   

          2010-08-11 10:59 by glq2000
          網上講連續整數和問題的博文很多,但博主這篇最講的最明白,贊一個~~~

          我按照樓主論文提供的方法寫了一個,代碼如下,其循環次數為O(n/4),相比之下還是樓主的方法更快些,循環次數為O(sqrt(2n)),
          void ContinueInt(int n)
          {
          int i, k, m, num=0;
          for(i=3; i<n/2+1; i +=2) //以步長為2從3開始到n/2為止,求n的所有奇數因子
          {
          if(n%i == 0)
          {
          ++num;
          m = n/i;
          k = (i-1)/2;
          for(int j=(m-k>0)?(m-k):(k-m+1); j<=m+k; ++j) //利用論文中的結論
          cout<<j<<" "; //即n=(2k+1)*m=(2k+1)*2m/2=(2k+1)(m-k+m+k)/2
          cout<<endl;
          }
          }
          if(n%2)//n本身是奇數
          {
          ++num;
          cout<<(n-1)/2<<" "<<(n-1)/2+1<<endl;
          }
          cout<<"in all, num="<<num<<endl;
          }

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 海盐县| 清河县| 阿克陶县| 深圳市| 明溪县| 剑河县| 东乌珠穆沁旗| 安远县| 汝州市| 平乡县| 固阳县| 辽宁省| 图们市| 句容市| 台州市| 正镶白旗| 余江县| 任丘市| 财经| 磐安县| 乌恰县| 威宁| 阳朔县| 上犹县| 霸州市| 广元市| 宿州市| 靖西县| 本溪市| 禄丰县| 饶河县| 德钦县| 容城县| 连江县| 怀集县| 长沙市| 巫溪县| 什邡市| 温泉县| 锡林郭勒盟| 兖州市|