Bob有一個奇怪的計數器。
第一秒 t=1時顯示3,接下來每秒減1,
直到倒數到1時,下一秒顯示為2*起始的數字(3),
再繼續倒數,倒數到1時,下一秒顯示為上一輪的2倍(2*2*3),
以此類推。
(即: 3->6->12->24......)
(3 2 1 6 5 4 3 2 1 12 11 10 9 8 7 ...)
給定一個時間t,印出那個時間點計數器顯示的數字。
輸入:
一個代表t的整數。
限制:
1<=t<=10的12次方
輸出:
印出這個奇怪的計數器再給定的時間t時顯示的值。
解題:
題目不難,就是不斷將t減去cycle再存起來,
直到不能再減,代表在本次cycle內會數到t的位置,
再把剩下的數完。
其實本題也可以用等比數列和去逐步計算,
但感覺用減的可能比較快速一些(因為還是要一輪一輪看)
code裡面n沒有用到,不過如果題目有額外要求的話,
可以用來確認經過的cycle數。
Code:
#include <math.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <limits.h> #include <stdbool.h> int main(){ long long int t; scanf("%lli",&t); long long int n = 1; long long int cycle = 3; while(t > cycle){ t -= cycle; n++; cycle *= (long long int) 2; } printf("%lli", (long long int)cycle - t + 1); return 0; }
沒有留言:
張貼留言