zoukankan      html  css  js  c++  java
  • UVA 10025 The ? 1 ? 2 ? ... ? n = k problem

    这题穷举举到大概N=210就很慢了,不过这个题没有让我们给出相应的式子,参考了几个文章,学习到了这种方法:每一次把一个加号改为减号的时候 此式子的值比原式减小了一个偶数,因此,我们只需要判断 1+2+...+k=S  S-N是不是偶数就可以了 。

    题目及AC代码如下:

     

     The ? 1 ? 2 ? ... ? n = k problem 

    The problem

    Given the following formula, one can set operators '+' or '-' instead of each '?', in order to obtain a given k
    ? 1 ? 2 ? ... ? n = k

    For example: to obtain k = 12 , the expression to be used will be:
    - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12
    with n = 7

    The Input

    The first line is the number of test cases, followed by a blank line.

    Each test case of the input contains integer k (0<=|k|<=1000000000).

    Each test case will be separated by a single line.

    The Output

    For each test case, your program should print the minimal possible n (1<=n) to obtain k with the above formula.

    Print a blank line between the outputs for two consecutive test cases.

    Sample Input

    2
    
    12
    
    -3646397
    

    Sample Output

    7
    
    2701

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cmath>
     4 int main(void)
     5 {
     6     int cases;
     7     scanf("%d", &cases);
     8     for (int i = 0; i < cases; i++)
     9     {
    10         int n;
    11         scanf("%d", &n);
    12         n = abs(n);
    13         int k = 1;
    14         while (1)
    15         {
    16             int S = (k + 1)*k / 2;
    17             if ((S - n) % 2==0 && S-n>=0) break;
    18             else k++;
    19         }
    20         printf("%d
    ", k);
    21         if (i < cases - 1) printf("
    ");
    22     }
    23 }
  • 相关阅读:
    [暑假集训Day4T1]羊圈
    [暑假集训Day3T3]平板涂色
    [暑假集训Day3T2]骑士问题
    [暑假集训Day3T1]小木棍
    [暑假集训Day2T3]团建活动
    [暑假集训Day2T2]走廊泼水节
    [暑假集训Day2T1]种树
    [暑假集训Day1T3]新的开始
    [暑假集训Day1T2]北极通讯网络
    [暑假集训Day1T1]黑暗城堡
  • 原文地址:https://www.cnblogs.com/VOID-133/p/3579029.html
Copyright © 2011-2022 走看看