#include <iostream> #include <cmath> #include <cstdio> using namespace std; void sort(int * a, int len)//冒泡升序排序 { int i, j, t; for(i = 0;i < len-1;i++) for(j = 0;j < len-1-i;j++) if(a[j] > a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } int main() { freopen("in1.txt", "r", stdin); int x, y, z; int Cr, Cy, Cb; int max_num_ball = 0;//球的最大个数 int cnt_ball = 0;//当前球的个数 int a[3];//按照升序存放x, y, z int b[3];//按照升序存放|Cr-Cy|, |Cy-Cb|, |Cb-Cr| bool a_b_is_same;//判断a数组和b数组是否相同 Cr = Cy = Cb = 0; cin >> x >> y >> z; a[0] = x; a[1] = y; a[2] = z;//数组a初始化 sort(a, 3); char color_ball; cin >> color_ball; while(!cin.eof()) { switch(color_ball) { case 'R': Cr++; break; case 'Y': Cy++; break; case 'B': Cb++; break; } cnt_ball++;//当前球的个数统计 b[0] = abs(Cr-Cy); b[1] = abs(Cy-Cb); b[2] = abs(Cb-Cr);//数组b初始化 sort(b, 3); a_b_is_same = true; for(int i = 0;i < 3;i++) if(a[i] != b[i]) a_b_is_same = false; if(cnt_ball > max_num_ball) max_num_ball = cnt_ball;//对球数目的最大值进行刷新 if(a_b_is_same) { cnt_ball = 0; Cr = Cy = Cb = 0;//所有的球消失 } cin >> color_ball; } cout << max_num_ball << endl; return 0; }
这一题总的来说还是挺简单的,我在比较前先排了序,这样比起来就会简单一点,我第一次提交时WA,后来发现是所有球消失时Cr、Cy、Cb没有赋值为0,改了之后就通过了。