1. 程式人生 > >uva 11384 Help is needed for Dexter

uva 11384 Help is needed for Dexter

print int https != () color div dex eof

https://vjudge.net/problem/UVA-11384

題意:

給出一個數n,任務是用最少的操作次數把序列1,2,3,。。。,n中所有的數都變成0。

每次操作可以從序列中選擇一個或者多個整數,減去同一個相同的正整數。

輸出最少的操作次數。

思路:

列了奇數和偶數的式子發現,每次減去最大值的(1 / 2) + 1,就可以使操作次數最少為log2(N) + 1,求對數的時候自己寫函數來求。

直覺:)

代碼:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int cal(long long n)
 5 {
 6
long long a = 1; 7 8 int cnt = 0; 9 10 while (a <= n) 11 { 12 a <<= 1; 13 cnt++; 14 } 15 16 return cnt - 1; 17 } 18 19 int main() 20 { 21 long long n; 22 23 while (scanf("%lld",&n) != EOF) 24 { 25 int ans = cal(n) + 1; 26
27 printf("%d\n",ans); 28 } 29 30 return 0; 31 }

uva 11384 Help is needed for Dexter