UVA 102
三个盒子,放九样东西,把相同颜色的放一块,这其中会移动一些东西,移动的次数最少的为结果,如果出现多种移动方法,就按字典序输出第一个
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<string.h> 3 struct an{ 4 int i1,i2,i3; 5 char s[5]; 6 int sum; 7 };//结构体保存类型及量 8 int main() 9 { 10 int bin[10]; 11 int i,su,k; 12 struct an ans[6]={{1,8,6,"BCG",0},{1,5,9,"BGC",0}, 13 {4,8,3,"CBG",0},{7,5,3,"CGB",0},{4,2,9,"GBC",0},{7,2,6,"GCB",0}};//这里按顺序初始化可以在后面的排序中节省步骤 14 while(scanf("%d",&bin[1])!=EOF) 15 { 16 for(i=0;i<6;i++) 17 ans[i].sum=0; 18 su=bin[1]; 19 for(i=2;i<=9;i++) 20 { 21 scanf("%d",&bin[i]); 22 su+=bin[i]; 23 } 24 for(i=0;i<6;i++)//枚举出所有类型的情况,得到每种类型不动的球的个数 25 { 26 ans[i].sum+=bin[ans[i].i1]+bin[ans[i].i2]+bin[ans[i].i3]; 27 } 28 k=0; 29 for(i=1;i<6;i++) 30 if(ans[k].sum<ans[i].sum) 31 k=i;//排序挑出不动的最多的,则移动就是最少的 32 printf("%s %d\n",ans[k].s,su-ans[k].sum);//输出时要输出移动的个数 33 } 34 return 0; 35 }