急眼的曹大神
阿新 • • 發佈:2018-11-10
急眼的曹大神
題目描述
話說有這麼一天, 曹大神正走在去上課的路上,突然他發現,似乎馬上就要遲到了,急的他馬上跳了起來(急的不能正常走路了 O(∩_∩)O哈哈~~)。現在假設曹大神的位置在(0,0),教室的位置在(x,0)。
曹大神第i次跳只能跳 i 的距離,幫曹大神算一下他最快能跳多少次就到教室,算對了曹大神可是會有感謝的喲~(每次跳躍可以向左也可以向右)
分析:
曹大神可以向左跳或者向右。因為要最快且正好跳到教室。我們假設,曹大神在第A次跳的時候,跳過了教室。那麼曹大神要跳回去。通過假設我們會發現,在第一次至第A次的時候,中間肯定不是單純的向一個方向跳,而是,左右結合跳,那麼我們先假設他一直往教室的方向跳,且第A次跳過了教室。如果第A次跳過了教室且與教室的距離為一個偶數,即(sum為第A次跳的距離)sum-x如果為偶數,則在第一次至第A次的時候之中,必定可以通過左右跳,來抵消多餘的,如果為一個奇數,則一定不可以,那麼我們只能通過再跳一次,繼而繼續判斷是不是偶數。
int main() { long long a,x,t,i,n,m,j,sum;//SUM儲存跳的距離 while(~scanf("%lld",&t)) { while(t--) { scanf("%lld",&n); if(n==0)//如果n=0,即與教室的距離為0,不用跳 { printf("%d\n",0); continue; } sum=0; if(n<0)//因為n可能為負數,所以需要判斷 n=-n; for(i=1;;i++) { sum=sum+i;//一直累計前i次跳的距離 if((sum-n)%2==0&&sum-n>=0)/*//sum-n〉0是因為有可能出現小於0且為偶數的可能性*/ break; } printf("%lld\n",i); } } }