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