zoukankan      html  css  js  c++  java
  • 分解成连续数字的和

    输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列

     思路:从1开始逐个累加,如果超过n,匹配失败,去除最小的元素,如果不足继续累加下一个,直至相等。

    #include <stdio.h>
    #include 
    <stdlib.h>

    int calc(int n)
    {
        
    int lastnum;
        
    int sum;
        
    int count;
        
    int flag = 1;

        lastnum 
    = sum = count = 0;

        
    int i = 0;
        
    while (count >= 0 && lastnum <= n/2 + 1) {
            
    if (sum < n) {    
                lastnum
    ++;
                printf(
    "add %d to sum\n", lastnum);
                count
    ++;
                sum 
    += lastnum;
            }
    else if (sum == n) {    // find a match
                printf("   *** match %d from %d to %d\n",
                        n, lastnum 
    - count + 1, lastnum);
                sum 
    -= (lastnum - count + 1);
                count
    --;
                flag 
    = 0;
            }
    else if (sum > n) {    
                printf(
    "reduce %d\n", lastnum - count + 1);
                sum 
    -= (lastnum - count + 1);
                count
    --;
            }
        }

        
    if ( flag )
            printf(
    "No matched for %d\n", n);

        
    return 0;
    }

    int main(int argc, int *argv)
    {
    //    int n = 8;
        int n = 15;

        calc(n);
        
    return 0;
    }
  • 相关阅读:
    P4149 [IOI2011]Race dsu on tree
    CodeForces
    2020牛客国庆集训派对day2 CHEAP DELIVERIES
    Hero In Maze
    topo排序
    今年暑假不AC
    小国的游戏
    Stall Reservations
    博弈论
    Reversed Words
  • 原文地址:https://www.cnblogs.com/faraway/p/1391154.html
Copyright © 2011-2022 走看看