zoukankan      html  css  js  c++  java
  • 【编程之美】2.21 只考加法的面试题

    就是输入一个数n, 输出它可以用连续的数表示的加法。

    如:

    输入9

    输出 9=4+5

           9=2+3+4

    代码: 我不会64位无符号正整数表示,就写个简单的int版本的好了...

    思路就是 如果sum = a + (a+1) + (a+2)...+(a+n-1)

    对于给定的n, a=(sum-n(n-1)/2)/n 若a为整数就成立,输出

    n的范围,最小是2, 最大是a=0时  n(n-1)/2=sum  n<sqrt(2sum)+1

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    void getAllContinuousNum()
    {
        int sum;
        scanf("%ul
    ", &sum);
    
        int maxlength = sqrt(double(sum) * 2) + 1;
        int firstnum = 0;
        for(int length = 2; length < maxlength; length++) //对数字的个数循环
        {
            if((sum - length * (length - 1) / 2)% length == 0) //可以得到解
            {
                firstnum = (sum - length * (length - 1) / 2) / length;
                printf("%d=%d", sum, firstnum);
                for(int num = firstnum + 1, i = 1; i < length; i++, num ++ )
                {
                    printf("+%d", num);
                }
                printf("
    ");    
            }
        }
    }
    
    int main()
    {
        for(int i = 0; i < 10; i++)
        {
            getAllContinuousNum();
        }
        return 0;
    }
  • 相关阅读:
    hdu 2196(树上点分治)
    hdu 4807(网络流 + 贪心)
    hdu4101
    hdu4216
    hdu 4219, 树形概率DP
    hdu 4127 A*搜索
    hdu 4126
    hdu 5296,15年多校1-7
    poj3436 ACM Computer Factory
    Fence
  • 原文地址:https://www.cnblogs.com/dplearning/p/4108689.html
Copyright © 2011-2022 走看看