解析:这是一道相对复杂一点的题目。难点在于字符串与所需次数的关联。
我写的很长,但并不慢。这题虽然可能有更简便的做法,可以把函数缩减,但是无论怎样都是耗费时间的。与其去想一些复杂的事情,不如简简单单的把题目做完。明明复制粘贴就可以完成的代码为什么要费尽心机把它缩短呢?
大家也许认为代码的长度很重要,甚至认为越短越好。其实是,ACM限制运行时间,限制内存占用,限制输出格式,但绝对不会限制代码长度(编译速度)!用宏替换来缩减代码只能作为平时的娱乐或是准备参加国际乱码大赛,况且宏替换对代码没有任何实际的物理作用。软件开放也一样,也许你写了一辈子的代码(不包括数据库)加起来的大小不如几张图片的大小。
其实写超长代码也是一种战略!
1 #include "iostream" 2 using namespace std; 3 int fun(char *p); //先声明 4 int a[3],b[3],c[3]; //全局可见 5 int main() 6 { 7 long int min,i,t; 8 char ch[6][4]={"BCG","BGC","CBG","CGB","GBC","GCB"}; 9 char *pt; //实时记录字符串 10 while(cin>>a[0]>>a[1]>>a[2]){ 11 for(i=0;i<3;i++) 12 cin>>b[i]; 13 for(i=0;i<3;i++) 14 cin>>c[i]; 15 min=fun(ch[0]); 16 pt=ch[0]; 17 for(i=1;i<6;i++){ 18 t=fun(ch[i]); 19 if(t<min){ 20 min=t; 21 pt=ch[i]; 22 } 23 } 24 cout<<pt<<' '<<min<<endl; 25 } 26 return 0; 27 } 28 int fun(char *p) //确定所需的次数 29 { 30 int t=0; 31 if(p[0]=='B'){ 32 t+=b[0]+c[0]; 33 if(p[1]=='C'){ 34 t+=a[2]+c[2]; 35 t+=a[1]+b[1]; 36 } 37 else{ 38 t+=a[1]+c[1]; 39 t+=a[2]+b[2]; 40 } 41 } 42 if(p[0]=='C'){ 43 t+=b[2]+c[2]; 44 if(p[1]=='B'){ 45 t+=a[0]+c[0]; 46 t+=a[1]+b[1]; 47 } 48 else{ 49 t+=a[1]+c[1]; 50 t+=a[0]+b[0]; 51 } 52 } 53 if(p[0]=='G'){ 54 t+=b[1]+c[1]; 55 if(p[1]=='C'){ 56 t+=a[2]+c[2]; 57 t+=a[0]+b[0]; 58 } 59 else{ 60 t+=a[0]+c[0]; 61 t+=a[2]+b[2]; 62 } 63 } 64 return t; 65 } 66