回 帖 发 新 帖 刷新版面

主题:[讨论]第47次编程比赛趣味题

有n堆石头(0<n<1000),两个人轮流从任一堆中任取(只能在一堆中取,不能不取),取走最后一枚石头的胜利.
现在给出石头堆数n和每堆石头个数,你是先取的人,请判断有无必胜策略.

函数接口:
// n - n堆石头
// a - 有n个正整数(<100),是每堆石头的个数
// 返回true表示有必胜策略,false代表没有.
bool stone(int n, int *a);
 
本次比赛截止时间为星期天中午12点整

回复列表 (共11个回复)

沙发

比赛开始

板凳

应该是全部异或起来,为0的有必胜策略。。。

3 楼

每次取多少个?好象应该有这个条件吧? 

4 楼


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int stone(int n, int *a);
int PutOutStone(int n, int *a);
int main()
{
    int *p;
    int n;
    int result;
    printf("please input the n\n");
    scanf("%d",&n);
    printf("please inout the stone number:\n");
    scanf("%d",p);
    result = stone(n,p);
    if (result == 1)
        printf("true:有必胜策略\n");
    else
        printf("false:没有必胜策略\n");
    getch();
    return 0;
        
}
int stone(int n, int *a)
{
    int a_person;
    int b_person;
    if (n == 1)
    {
       printf("a-person 拿走 所有的石头,a-person 胜利!");
       return 1;      
    }
    else if (n == 2)
    {
       printf("a-person 拿走第一堆的 a-1 个石头,\n"); 
       printf("b_person 只能拿走第一堆剩下的石头,a-person再拿走第二堆所有的石头,\n");
       printf("所以 a_person win!");  
       return 1;    
    }
    else if (n >= 3)
       stone(n-1, a);

     
             
     
     
}

5 楼

xuexi

6 楼

#include<stdio.h>
#include<math.h>
bool stone(int n,int *a)
{    
    int tmp,count;
    int i,j,m;
    count = 0;
    m = 0;        
    for(i=0;i<n;i++)
        if(a[i]<=1)count++;
    for(i=0;i<n;i++)
    {
        if(a[i]==1)m++;
    }
    /*先考虑简单情况,所有堆都不大于1*/
    if(count==n)
    {
        if(m%2==0)return true;
        else return false;
    }
    /*否则通过异或结果判断是否平衡态*/
    else
    {
        tmp = a[0];
        for(j=1;j<n;j++)
        {
            tmp = tmp^a[j];
        }
        if(tmp==0)return true;
        else return false;
    }
}
/*for test
int main()
{
    int a[1000];
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("%d",stone(n,a));
    return 0;
}
*/

7 楼

二人游戏,用最大最小策略,并进行剪枝

8 楼

这道题,好像40期左右出过了

9 楼

ghy

10 楼

呵呵 呵呵~ 呵呵·!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册