E81086713E446D36F62B2AA2A3502B5EB155

          Java雜家

          雜七雜八。。。一家之言

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            40 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks
          如題:求連續(xù)正整數(shù)使得其和為給定的一個正整數(shù)
          下面給出我的解法,幾乎可以一步到位求出來
          實現(xiàn)代碼如下:
          /**
          *Author: Koth (
          http://weibo.com/yovn)
          *Date:  2011-12-01
          */
          #include 
          <stdlib.h>
          #include 
          <stdio.h>
          #include 
          <stdint.h>

          int solve(int Y,int& X){
              
          int m=0;
              
          int t=Y;
              
          if(Y<=0){
                  X
          =Y;
                  
          return 1;
              }
              
          while((t&1)==0){
                  m
          +=1;
                  t
          =t>>1;
              }
              
          if(m==32){
                  X
          =Y;
                  
          return 1;
              }
              
          int lastK=32;
              
          for(;lastK>m+1;lastK--){
                  
          if(Y &(1<<(lastK-1))){
                      
                      
          break;
                  }
                      
              }

              
          //its a number st. exp(2,K)
              if(lastK==(m+1)){
                  X
          =Y;
                  
          return 1;
              }
              
          int k=1<<(m+1);
              
          int b=(Y>>m)-(1<<(lastK-m-1));

              X
          =(1<<(lastK-m-2))+(b+1-k)/2;

              
          if(X<=0){
                  k
          =k-1-((0-X)<<1);
                  X
          =0-X+1;
              }
              
              
          return k;

          }

          int main(int argc,char* argv[]){
              
          if(argc<=1){
                  fprintf(stdout,
          "Usage:%s number\n",argv[0]);
                  
          return 0;
              }
              
          int Y=atoi(argv[1]);
              
          int X=0;
              
          int k=solve(Y,X);
              fprintf(stdout,
          "%d=",Y);
              
          for(int i=0;i<k;i++){
                  fprintf(stdout,
          "%d",X+i);
                  
          if(i<(k-1)){
                      fprintf(stdout,
          "+");
                  }
              }
              fprintf(stdout,
          "\n");
              
          return 0;
          }
          posted on 2011-12-01 22:09 DoubleH 閱讀(1790) 評論(2)  編輯  收藏 所屬分類: Memorandum

          Feedback

          # re: 求連續(xù)正整數(shù)使得其和為給定的一個正整數(shù)的構造性解法 [未登錄] 2011-12-13 17:01 tbw
          學習了  回復  更多評論
            

          # re: 求連續(xù)正整數(shù)使得其和為給定的一個正整數(shù)的構造性解法 2011-12-16 18:20 淘寶商城雪地靴
          哈哈不錯。支持下博主  回復  更多評論
            

          主站蜘蛛池模板: 丹凤县| 镇沅| 封丘县| 乌兰浩特市| 浠水县| 桐柏县| 华坪县| 嘉禾县| 舟曲县| 磐安县| 应城市| 远安县| 田林县| 虹口区| 理塘县| 揭东县| 石城县| 乐平市| 政和县| 昌图县| 安新县| 怀柔区| 和顺县| 塔城市| 阳江市| 晋江市| 迭部县| 新郑市| 葵青区| 宣恩县| 房山区| 五华县| 武川县| 青川县| 镇平县| 仁怀市| 绥江县| 涞水县| 梁山县| 惠来县| 道孚县|