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;
}