zoukankan      html  css  js  c++  java
  • 北航 2012年考研复试题1

     

    某些整数能分解成若干个连续整数的和的形式,例如
        15 = 1 + 2+3+4+5 
        15 = 4 + 5 + 6
        15 = 7 + 8
    某些整数不能分解为连续整数的和,例如:16
    输入:一个整数N(N <= 10000)
    输出:整数N对应的所有分解组合,按照每个分解中的最小整数从小到大输出,每个分解占一行,每个数字之间有一个空格(每行最后保留一个空格);如果没有任何分解组合,则输出NONE。

    解题思路:

    根据题目,任何可以进行分解的整数,必然满足(m+n)(n-m+1)/2的形式,可以暴力尝试所有m和n组合,如果满足则输出,否则输出None。

    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main(){
    
        int n;
    
        while(scanf("%d",&n) != EOF){
    
           int begin,end;
    
           int found = 0;
    
           for(begin=1;begin<=n/2;begin++){
    
               for(end=begin+1;end<n;end++){
    
                  // 连续整数求和
    
                  int sum = (begin + end)*(end-begin+1)/2;                    
    
                  if(sum == n){ // 可以分解,输出结果
    
                      found = 1;
    
                      int i;
    
                      for(i=begin;i<=end;i++){
    
                         printf("%d ",i);
    
                      }
    
                      printf("
    ");
    
                  }
    
               }
    
           }
    
           if(found == 0){
    
               printf("NONE
    ");
    
           }
    
        }
    
        return 0;
    
    }
  • 相关阅读:
    Codeforces 1265A Beautiful String
    1039 Course List for Student (25)
    1038 Recover the Smallest Number (30)
    1037 Magic Coupon (25)
    1024 Palindromic Number (25)
    1051 Pop Sequence (25)
    1019 General Palindromic Number (20)
    1031 Hello World for U (20)
    1012 The Best Rank (25)
    1011 World Cup Betting (20)
  • 原文地址:https://www.cnblogs.com/Xilian/p/3826179.html
Copyright © 2011-2022 走看看