UVA 102

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=24&problem=38&mosmsg=Submission+received+with+ID+11307365

三个盒子,放九样东西,把相同颜色的放一块,这其中会移动一些东西,移动的次数最少的为结果,如果出现多种移动方法,就按字典序输出第一个

View Code
 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 }

 

posted @ 2013-02-19 10:55  执着追求的IT小小鸟  阅读(214)  评论(0编辑  收藏  举报