社区讨论

80求调,WA#9#10,玄关

P3880[JLOI2008] 提示问题参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mdb6os0p
此快照首次捕获于
2025/07/20 12:35
8 个月前
此快照最后确认于
2025/11/04 04:04
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
string a;
char b[55];
bool c[55];
bool d[55];
double sum;

char g[10] = {'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'};
int main() {
	getline(cin, a);
	strcpy(b, a.c_str());
	int k = a.length() - 1;
	for (int i = 0; i <= k; i++) {
		d[i] = 0;
		c[0] = 0;
	}
	for (int i = 0; i <= k; i++) {
		if (isalpha(b[i]) != 0) {
			c[i] = 1;
			sum++;
			for (int y = 0; y < 10; y++) {
				if (b[i] == g[y]) {
					d[i] = 1;
				}
			}
		} else {
			c[i] = 0;
		}
	}
	//第一种操作,全.
	for (int i = 0; i <= k; i++) {
		if (c[i] == 1) {
			cout << ".";
		} else
			cout << b[i];
	}
	cout << endl;
	//第二种操作,取三分之一(接近取整式)保留,其余.
	double f = sum / 3;
	int h = int(sum / 3);
	//cout << "f:" << f << endl;
	//cout << "h1:" << h << endl;
	if (f - h > 0.5) {
		h = int(sum / 3 ) + 1;
	}
	//cout << "h2:" << h << endl;
	//cout << "h:" << h << endl;
	int p = 0;
	int q = 0;
	while (p < h) {
		cout << b[q];
		if (c[q] == 1) {
			p++;
		}
		q++;
	}
	for (int i = q; i <= k; i++) {
		if (c[i] == 1) {
			cout << ".";
		} else
			cout << b[i];
	}
	cout << endl;
	//第三种操作,二基础上保留剩余三分之二部分中的元音,若无则直接保留三分之二
	int pan = 0;
	for (int i = h; i <= k; i++) {
		if (d[i] == 1) {
			pan = 1;
		}
	}
	if (pan == 1) {
		int p = 0;
		int q = 0;
		while (p < h) {
			cout << b[q];
			if (c[q] == 1) {
				p++;
			}
			q++;
		}
		for (int i = q; i <= k; i++) {
			if (c[i] == 1 && d[i] != 1) {
				cout << ".";
			} else
				cout << b[i];
		}
	} else {
		double f = sum / 3 * 2;
		int h = int(sum / 3 * 2);
		if (f - h > 0.5) {
			h = int(sum / 3 * 2 + 1);
		}
		int p = 0;
		int q = 0;
		while (p < h) {
			cout << b[q];
			if (c[q] == 1) {
				p++;
			}
			q++;
		}
		for (int i = q; i <= k; i++) {
			if (c[i] == 1) {
				cout << ".";
			} else
				cout << b[i];
		}

	}
}

回复

2 条回复,欢迎继续交流。

正在加载回复...