题目:http://paste.ubuntu.com/14157516/
思路:判断一个西瓜,看看能不能直接吃完,如果能,就吃了。但是:如果不能,就要分成两半,就这样分割,不用以为要用到n维数组,用一个一维数组就够了,利用队列的特点,把分割了的入队,然后一直遍历整个队列。
#include <stdio.h> #include <stdlib.h> void work() { int n,k; int que[100000]={0}; int head,tail; int i_count=0; head=tail=1; scanf ("%d%d",&n,&k); que[tail++]=n; while (head<tail) { if (que[head]<=k) { i_count++; head++; } else { if (que[head]%2==0) { que[tail++]=que[head]/2; que[tail++]=que[head]/2; head++; } else { que[tail++]=que[head]/2; que[tail++]=que[head]/2+1; head++; } } } printf ("%d ",i_count); return ; } int main() { int t; scanf ("%d",&t); while (t--) { work(); } return 0; }