您的位置:首页 > 其它

吃糖果问题

2016-01-19 21:19 197 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Xiaohang0qw/article/details/50544996

【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必胜。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: