吃糖果问题

【OJ问题】
在编译器上执行正确,但是在OJ上提交错误。
提交代码如下

#include <stdio.h>
#include <stdlib.h>

int main()
{
int m[10],n[10],i=0,j,k;
//进行十行的数据输入。
while(1)
        {
        scanf("%d %d",&m[i],&n[i]);
        i=i+1;
        if(i==10) break;
        }

//进行十行数据的输出。
i=0;
while(1)
{
        j=m[i]%10;
        k=n[i]%10;
        if((j==2||j==3||j==7||j==8)&&(k==2||k==3||k==7||k==8))
                printf("yes\n");
        else
                printf("no\n");

//循环十次。
i=i+1;
if(i==10) break;
}

}

我的思路:自己的思路和下面的引用的思路差不多,思考过。
汲取点:但是下面的做了一般说明,化为通用的结果。
<解题思路>

引用:http://www.cnblogs.com/Shymuel/p/4648970.html
来源
Matrix67原创

分析:这题其实不难。与萌萌的糖果那道题类似。我还是从头分析一下,给像我一样的蒟蒻引路。

我们假设两堆a,b,先吃a。

如果是a,1,显然67胜。如果是a,2,显然67挂了。如果是a,3,3=1+2,67还是挂。如果是a,4,4=2+2。67胜了。

如果是a,5或6,5=2+3,6=3+3,67胜。如果a,7,若7=2+5,s可以吃掉2然后分成2+3,67挂;若7=1+6,s可以拿走1然后分成3+3;

若7=2+5,s可以吃掉2然后分成2+3。所以a,7的话67必挂。如果是a,8,同7的情况67挂了。如果是a,9,恭喜9=2+7,s必挂无疑。

如果是a,10。10=2+8,于是你又赢了。

我们可以定义集合a={2,3,7,8},b={1,4,5,6,9,10}。

考虑两堆都大于10的情况。

(1)10*i+a,10*i+a。则67必输。

(2)10*i+a,10*i+b,你可以吃掉10*i+a,然后把10*i+b分成两堆10*i+a,67必胜。

(2)10*i+b,10*i+b,67必胜。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值