UVA10025

来源:互联网 发布:中国农业银行软件 编辑:程序博客网 时间:2024/06/13 08:38

题目的意思就是给你一个数k;

问1?2?3?4?5?6........其中问号可以是加号或者减号,使式子等于k的最短序列。。

思路是,先把式子全部变成加号,直到大于等于k。全加才刚刚大于k,那有加有减就不可能等于k了。所以在这个长度的基础上去加就好。。

然后拿9这个数字来举例,加入你从1加到4等于10,大于9了。。现在你要想办法把加号改成减号,使他等于1.。可是这是不可能的。

因为10 - 1变成9,就算你只是把1改掉,他也会少2(因为加1变成减1一来一回差2).。

所以我们只能在多一位,变成1加到5 等于15,15比9大了6.。这样只要把+3改为-3就可以。。

规律就出来了。。从1开始一直加到大于k,并且和k差是偶数就可以了。。。。


AC代码:


#include<stdio.h>int main () {long long k;long long i;long long len,res;int T;scanf("%d",&T);while (T--) {scanf("%lld",&k);if (k < 0)k = -k;for (i = 1 ;(1 + i) * i /2 < k ;i++);res = (1 + i) * i / 2;len = i;while ((res - k) % 2 != 0) {res += (++len);}printf("%lld\n",len);if(T)printf("\n");}return 0;}


0 0
原创粉丝点击