厦大上机1385

石子消耗游戏

描述

小明和小强在路上看到了一堆石子,数了数发现有N颗。无聊的他们决定玩一个游戏,由小明先取K颗石子,取完后换小强取,取2K颗,接着再换小明取,取3K颗,以此类推,他们轮流取,每次都比上一次多取K颗,问最后谁把石子取完(包括取的时候石子不够了),以及他们一共取了多少轮。请用函数嵌套来实现。

注意:你提交的代码将被插入到以下程序框架中一起编译,所以请不要提交全部代码。

//固定头部开始
#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)
{

}
void QiangPick(int left, int k, int turn)
{

}
//你的代码结束

//固定尾部开始
int main()
{
    int n, k;
    scanf("%d%d", &n, &k);
    MingPick(n, k, 1);
    return 0;
}
//固定尾部结束

输入

输入只有一行,包括2个整数N,K,如题目所述。(0 \lt N,K \lt 2 ^ {31}0<N,K<231)

输出

输出两行。

第一行若小明先取完,则输出“MING!”,否则输出“QIANG!”。(不包括引号)

第二行输出一个整数,代表取的轮次数。

输入样例 1 

20 3

输出样例 1

QIANG!
4

提示

1、小明取3颗

2、小强取6颗

3、小明取9颗

4、小强取2颗(取完)

void MingPick(int left, int k, int turn)
{
   int n=left;
    for(int i=1;;i++)
    {
        if(i%2==1)//用i的奇偶来判断是小强还是小明抓取石子
        {
            n=n-k*i;
            if(n<=(i+1)*k)
            {
                printf("QIANG!\n%d",i+1);
                break;
            }
        }
        else
        {
             n=n-k*i;
            if(n<=(i+1)*k)
            {
                printf("MING!\n%d",i+1);
                break;
            }
        }

    }
}
void QiangPick(int left, int k, int turn)
{
   int n=left;
    for(int i=1;;i++)
    {
        if(i%2==1)
        {
            n=n-k*i;
            if(n<=(i+1)*k)
            {
                printf("MING!\n%d",i+1);
                break;
            }
        }
        else
        {
             n=n-k*i;
            if(n<=(i+1)*k)
            {
                printf("QIANG!\n%d",i+1);
                break;
            }
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值