E81086713E446D36F62B2AA2A3502B5EB155

          Java雜家

          雜七雜八。。。一家之言

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            40 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks

          2011年2月6日 #

          如題:求連續正整數使得其和為給定的一個正整數
          下面給出我的解法,幾乎可以一步到位求出來
          實現代碼如下:
          /**
          *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 @ 2011-12-01 22:09 DoubleH 閱讀(1783) | 評論 (2)編輯 收藏

               摘要: 年過的差不多了,今天偶爾興起上HOJ上翻幾道DP練手的題來。。。,順便把代碼貼下留念  1.數塔 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->/**  *   */ pack...  閱讀全文
          posted @ 2011-02-06 21:13 DoubleH 閱讀(2022) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 鸡泽县| 海南省| 梁平县| 北川| 双柏县| 长垣县| 通榆县| 万盛区| 德令哈市| 循化| 汝阳县| 甘谷县| 南投市| 易门县| 高雄县| 合阳县| 江永县| 佛冈县| 平潭县| 黄浦区| 张掖市| 渝中区| 常山县| 禄劝| 韶关市| 新河县| 澄江县| 余江县| 扎鲁特旗| 呼和浩特市| 台东市| 蕲春县| 久治县| 商丘市| 肥乡县| 凤阳县| 吉安县| 南澳县| 上蔡县| 岑巩县| 昌吉市|