qiyadeng

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

          導航

          公告

          更多請訪問,www.qiyadeng.com
          <2009年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(12)

          文章分類(35)

          相冊

          J2EE

          Others

          Tools

          積分與排名

          • 積分 - 311521
          • 排名 - 184

          最新評論

          閱讀排行榜

          表正整數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;
          }

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


          網站導航:
           
          主站蜘蛛池模板: 年辖:市辖区| 黄浦区| 阳朔县| 武威市| 两当县| 石阡县| 余姚市| 白朗县| 晋城| 如皋市| 聂拉木县| 陵水| 朝阳县| 永春县| 平南县| 清原| 阿拉善左旗| 监利县| 祁阳县| 灵川县| 茌平县| 宁安市| 望都县| 乌什县| 个旧市| 梁平县| 竹溪县| 昭苏县| 浦北县| 涞源县| 枣阳市| 公主岭市| 休宁县| 碌曲县| 肥东县| 晴隆县| 泰顺县| 罗田县| 察隅县| 合阳县| 应用必备|