天天看點

廈大C語言上機 1385 石子消耗遊戲

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