1385.石子消耗遊戲
時間限制: 1000 MS 記憶體限制: 65536 K
送出數: 487 (0 users) 通過數: 283 (272 users)
問題描述
小明和小強在路上看到了一堆石子,數了數發現有N顆。無聊的他們決定玩一個遊戲,由小明先取K顆石子,取完後換小強取,取2K顆,接着再換小明取,取3K顆,以此類推,他們輪流取,每次都比上一次多取K顆,問最後誰把石子取完(包括取的時候石子不夠了),以及他們一共取了多少輪。請用函數嵌套來實作。
輸入格式
輸入隻有一行,包括2個整數,N,K,如題目所述。(0<N,K<2^31)
輸出格式
輸出兩行。
第一行若小明先取完,則輸出”MING!”,否則輸出”QIANG!”。(不包括引号)
第二行輸出一個整數,代表取的輪次數。
樣例輸入
20 3
樣例輸出
QIANG!
4
來源
xmu
#include <stdio.h>
int main()
{
int n, k;
int pick_how_many;
int turns;
scanf("%d %d", &n, &k);
turns = 0;
pick_how_many = k;
while (n > 0)
{
n -= pick_how_many;
turns++;
pick_how_many += k;
}
if (turns % 2 == 1)
printf("MING!\n");
else
printf("QIANG!\n");
printf("%d\n", turns);
return 0;
}
若是用函數嵌套完成:
#include <stdio.h>
void MingPick(int left, int k, int turn);
void QiangPick(int left, int k, int turn);
void MingPick(int left, int k, int turn)
{
if (left - turn * k <= 0)
printf("MING!\n%d", turn);
else
QiangPick(left - turn * k, k, turn + 1);
}
void QiangPick(int left, int k, int turn)
{
if (left - turn * k <= 0)
printf("QIANG!\n%d", turn);
else
MingPick(left - turn * k, k, turn + 1);
}
int main()
{
int n, k;
scanf("%d%d", &n, &k);
MingPick(n, k, 1);
return 0;
}