关键是如何假设糖果在哪里?令糖果为具体的数值,1,2,3
猜测的位置刚好为糖果的数值就可以了;
注意位置的交换,对应的数值交换,
如第一次,a=1,b=2交换。1,2号位交换,a=2,b=1,
下次还是一二号位交换,1,2号位不同变量表示;
下面还有简化的,用数组;
#include <stdio.h>
#include <math.h>
int main()
{ int n,i,a=1,b=2,c=3,m=0,j=0,k=0,t,e,f,g,d;
scanf("%d",&n);
for(d=1;d<=n;d++){
scanf("%d%d%d",&e,&f,&g);
if((e==1||e==2)&&(f==1||f==2)){ //位置交换
t=a,a=b,b=t;} //对应数值交换
if((e==1||e==3)&&(f==1||f==3)){
t=a,a=c,c=t;}
if((e==3||e==2)&&(f==3||f==2)){
t=c,c=b,b=t;}
i=1; //假设糖果
if(g==1&&a==1) m++;
if(g==2&&b==1) m++;
if(g==3&&c==1) m++;
i=2;
if(g==1&&a==2) k++;
if(g==2&&b==2) k++;
if(g==3&&c==2) k++;
i=3;
if(g==1&&a==3) j++;
if(g==2&&b==3) j++;
if(g==3&&c==3) j++;
}
if(m<j){ //确定最大值
t=m,m=j,j=t;
}
if(m<k)
{
t=m,m=k,k=t;
}
printf("%d",m);
return 0;
}
用数组
#include<stdio.h>
#include<math.h>
#include<stdli.h>
const intN =110;
int main(){
int x,y,g, a[4], c[N],n;
for(int i =1; i<=3; i++)
a[i]=i;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{ scanf("%d%d%d",&x,&y,&g);
int t=a[x];
a[x]=a[y],a[y]=t; //杯子互换位置
c[i]=a[g] //小b所知位置的位置g上的杯子,就是a[g]
}
int max=0;
for (int i=1; i<=3;i++)
{
int sum = 0;
for (int j = 1; j<=n;j++
{ if(c[j]==i)
sum++
}
if(sum>max) max=sum;
}
printf("%d.max);
return 0;
}
这是标答,有点不理解,参考