90分打采购请求大伙帮忙
查看原帖
90分打采购请求大伙帮忙
55724
Zhu1886楼主2023/10/24 20:49
#include<iostream>
using namespace std;
int main() {
	string str1;
	cin >> str1;
	int N = str1.length();
	for (int i = 0; i < N; i++) {  //将所有字符转换成数字,方便后续排序
		if (str1[i] == '.')
			str1[i] = 0;
		if (str1[i] == 'b')
			str1[i] = 2;
		if (str1[i] == 'o')
			str1[i] = 3;
		if (str1[i] == 'y')
			str1[i] = 4;
		if (str1[i] == 'g')
			str1[i] = 16;
		if (str1[i] == 'i')
			str1[i] = 17;
		if (str1[i] == 'r')
			str1[i] = 18;
		if (str1[i] == 'l')
			str1[i] = 19;
//		str1[str1.length() + i] = 0;  //这样拓展str1会导致访问超出范围
		str1 =str1+'0';
	}
	int boy = 0, girl = 0,sum=0;  //sum用来统计是否全部刮干净
	while (sum != N) {
		sum = 0;
//		sum++;
		for (int i = 0; i < N; i++) {
			if (str1[i] + str1[i + 1] + str1[i + 2] == 9) {  //挂掉最表层boy
				str1[i] = str1[i + 1] = str1[i + 2] = 0;
				boy++;
			}
			if (str1[i] + str1[i + 1] + str1[i + 2]+ str1[i+3] == 70) {   //挂掉最表层girl
				str1[i] = str1[i + 1] = str1[i + 2] = str1[i+3] = 0;
				girl++;
			}
			if (str1[i] == 0) {
				sum++;
			}
		}
		for (int i = 0; i < N; i++) {
			if (str1[i] > 1 && str1[i] < 4 && str1[i + 1] == 0) {  //从左到右填补男生
				str1[i + 1] = str1[i] + 1;
			}
			if (str1[i] > 15 && str1[i] < 19 && str1[i + 1] == 0) {  //从左到右填补女生
				str1[i + 1] = str1[i] + 1;
			}
		}
		for (int i = N - 1; i > 0; i--) {
			if (str1[i] > 2 && str1[i] < 5 && str1[i - 1] == 0) {  //从右到左填补男生
				str1[i - 1] = str1[i] - 1;
			}
			if (str1[i] > 16 && str1[i] < 20 && str1[i - 1] == 0) {  //从右到左填补女生
				str1[i - 1] = str1[i] - 1;
			}
		}
	}
	cout << boy << endl << girl;
//	system("pause");
	return 0;
}

2023/10/24 20:49
加载中...