1. 程式人生 > >盒子取球C語言 藍橋杯

盒子取球C語言 藍橋杯

std 取出 取值 void 根據 特定 我們 i++ n)

盒子取球方法二今盒子裏有 n 個小球,A、B 兩人輪流從盒中取球,每個人都可以看到另一個人取了多少個,

也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。

我們約定:每個人從盒子中取出的球的數目必須是:1,3,7 或者 8 個。輪到某一方取球時不能棄權!

A 先取球,然後雙方交替取球,直到取完。被迫拿到最後一個球的一方為負方(輸方)請編程確定出在雙方都

不判斷失誤的情況下,對於特定的初始球數,A 是否能贏?程序運行時,從標準輸入獲得數據,其格式如下:

先是一個整數 n(n<100),表示接下來有 n 個整數。然後是 n 個整數,每個占一行(整數<10000),

表示初始球數。程序則輸出 n 行,表示 A 的輸贏情況(輸為 0,贏為 1)。

分析:當 n==1 時,A一定會輸,當n等於3,5時A也會輸,n為2,4,8時A必定會贏,由此分析當 n 為 1+

[1,3,7,8]時,A可以取[1,3,7,8]得一個數,然後將1留給B,也就是說,有些必輸得數誰取到誰就會輸。當 n為一個必輸

的值加上[1,3,4,8]時A比贏。

代碼如下:

#include<stdio.h>
void fun(int *a)
{
int b[]={1,3,7,8};
int i;
for(i=1;i+8<=1000;i++)//註意此處i的取值,
{
if(a[i]==0)
{
for(int j=0;j<=3;j++)//根據必輸的值找出必贏的值

a[i+b[j]]=1;
}
}
}
int main()
{
int a[1001]={0};
int n,m;

scanf("%d",&n);
fun(a);
while(n--)

{

scanf("%d",&m);

printf("%d\n",a[m]);

}

return 0;
}

盒子取球C語言 藍橋杯