您現在的位置是:首頁 > 武術

8球勝負問題決斷

  • 由 記與思 發表于 武術
  • 2022-01-22
簡介函式scanf()不會讀走數後面的'n',所有需要用函式getchar()讀取'n'

碰對方球打進黑八算誰贏

題目:

8球是一種檯球競賽的規則。檯面上有7個紅球、7個黃球以及一個黑球,當然還有一個白球。對於本題,我們使用如下的簡化規則:紅、黃兩名選手輪流用白球擊打各自顏色的球,如果將該顏色的7個球全部打進,則這名選手可以打黑球,如果打進則算他勝。如果在打進自己顏色的所有球之前就把黑球打進,則算輸。如果選手不慎打進了對手的球,入球依然有效。

現在給出打進的球(白球除外)的順序,以及黑球由哪方打進,你的任務是判定哪方是勝者。

假設不會有一杆同時打進一顆黑球和其他綵球。

輸入:

輸入包含多組資料。每組資料第一行是一個整數N(1<=N<=15),表示打進的球的個數,N=0表示結束。隨後有一行,包含N個字元,依序表示打進的是何種球。如果是’B’,表示是紅方打進的黑球,如果是’L’,表示是黃方打進的黑球。如果是’Y’則表示是黃球,’R’表示紅球。字元間沒有空格。

所有輸入都滿足如下條件:最後一顆球打進時這局比賽正好結束,而且打進的紅球和黑球都不超過7個。

輸出:

對每組資料,輸出一行。如果紅方勝,輸出’Red’;黃方勝,輸出’Yellow’。

程式:

一:

#include

int main()

{

int n, red, yellow, i;

char c;

while(scanf(“%d”, &n) != EOF && n) {

getchar();

//函式scanf()不會讀走數後面的'\n',所有需要用函式getchar()讀取'\n'。

red = yellow = 0;

for(i=0; i

scanf(“%c”, &c);

if(c == ‘R’)

red++;

else if(c == ‘Y’)

yellow++;

}

if(c == ‘B’)

printf(“%s\n”, (red == 7) ? “Red” : “Yellow”);

else if(c == ‘L’)

printf(“%s\n”, (yellow == 7) ? “Yellow” : “Red”);

}

return 0;

}

二:

#include

#define N 15 + 1

char s[N+1];

int main(void)

{

int n, red, yellow, i;

while(scanf(“%d”, &n) != EOF && n) {

getchar();

fgets(s, N, stdin);

//由於函式gets()不被推薦使用(容易造成儲存越界訪問),所有使用函式fgets()來讀入一行字串。

red = yellow = 0;

for(i=0; i

if(s[i] == ‘R’)

red++;

else if(s[i] == ‘Y’)

yellow++;

if(s[n-1] == ‘B’)

printf(“%s\n”, (red == 7) ? “Red” : “Yellow”);

else if(s[n-1] == ‘L’)

printf(“%s\n”, (yellow == 7) ? “Yellow” : “Red”);

}

return 0;

}

與程式二相比,程式一沒有使用陣列

節省下了大量儲存空間

更為優秀。

8球勝負問題決斷

Top