zoukankan      html  css  js  c++  java
  • Sum

    Sum

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:2
     
    描述
    Consider the natural numbers from 1 to N. By associating to each number a sign (+ or -) and calculating the value of this expression we obtain a sum S. The problem is to determine for a given sum S the minimum number N for which we can obtain S by associating signs for all numbers between 1 to N. 

    For a given S, find out the minimum value N in order to obtain S according to the conditions of the problem. 
     
    输入
    The input consists N test cases.
    The only line of every test cases contains a positive integer S (0< S <= 100000) which represents the sum to be obtained.
    A zero terminate the input.
    The number of test cases is less than 100000.
    输出
    The output will contain the minimum number N for which the sum S can be obtained.
    样例输入
    3
    12
    0
    样例输出
    2
    7
    来源
    POJ
    上传者
    张云聪
     
     
    明天就要考高数了、今晚写写水题练练、、、暑假要好好学习、、、大学的期末就是个坑O(∩_∩)O哈!
     
    设 带正号的和为X,带负号部分和为Y
    X+Y=(1+N)N/2;
    X-Y=k;
    所以,(1+N)N/2-k   一定是能被2整除才行,O(∩_∩)O~

    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    using namespace std;
    int main()
    {
        int n,k,sum;
        while(scanf("%d",&k),k)
        {
            sum=n=1;
            while(sum<k)
              sum+=++n;
            while((sum-k)%2)
            {
                 n++; 

                 sum+=n;
            }

            printf("%d\n",n);

        }
        return 0;
    }

  • 相关阅读:
    Tomcat安装与配置
    模板方法模式
    观察者模式
    访问者模式
    策略模式
    迭代器模式
    状态模式
    访问者模式
    备忘录模式
    解释器模式
  • 原文地址:https://www.cnblogs.com/372465774y/p/2555309.html
Copyright © 2011-2022 走看看