题目描述
我们把只有0和1组成的字符串叫做比特字符串。如果比特字符串中1的个数为奇数,则称这个比特字符串是奇性的。如果比特字符串中1的个数为偶数,则称这个比特字符串是偶性的。
注意:
(1)0是偶数,所以不包含1的比特字符串是偶性的。
(2)0的个数不影响比特字符串的奇偶性。
输入
输出
每组输入对应一个输出,你应该将最后的字母替换成0或1,使得此比特字符串符合输入时确定的奇偶性。
样例输入
101e
010010o
1e
000e
o
样例输出
1010
0
11
0000
思路:
计算出字符串中0和1的个数,然后按照样例写代码即可
注意:
- 输入的字符串最后一位是e/o,故字符串中字符0/1的个数最多为s.size() - 1
- 注意强制类型转换(int)s.size()
- 如果原字符串是偶性的且字符1的个数也为偶数,那么只能将末尾字符变为0(变为1会将1的个数由偶数变为奇数从而改变了奇偶) 101e -> 1010
- 若1的个数为奇数但字符串为偶性,则只能将最后一位字符变为’1’ 1e -> 11
- 若字符串中1的个数为偶数但字符串为奇性,则只能将最后一位字符变为’1’ 010010o -> 0
- 若字符串中1的个数为奇数且字符串为奇性,则只能将最后一位字符变为’0’ o ->
- 不包含1的字符串(字符串全为0)是偶性的,此时只能将字符串最后一位变为’0’才不会改变奇偶性 000e -> 0000
- 还要注意一种情况:0000o -> 00001
AC代码:
#include <cstdio> #include <string> #include <cstring> #include <iostream> using namespace std; int main() {
string s; while (cin >> s && s != "#") {
int len = (int)s.size(); //计算字符串中0/1的个数 int cnt_1 = 0,cnt_0 = 0; for (int i = 0;i < len - 1;i++) {
if (s[i] == '1') cnt_1 += 1; else if (s[i] == '0') cnt_0 += 1; } //000e -> 0000 if (cnt_0 == len - 1 && (char)s[len - 1] == 'e') s[len - 1] = '0'; //0000o -> 00001 else if (cnt_1 == 0 && (char)s[len - 1] == 'o') s[len - 1] = '1'; //1e -> 11 else if (cnt_1 % 2 != 0 && (char)s[len - 1] == 'e') s[len - 1] = '1'; //101e -> 1010 else if (cnt_1 % 2 == 0 && (char)s[len - 1] == 'e') s[len - 1] = '0'; //010010o -> 0 else if (cnt_1 % 2 == 0 && (char)s[len - 1] == 'o') s[len - 1] = '1'; //o -> else if (cnt_1 % 2 != 0 && (char)s[len - 1] == 'o') s[len - 1] = '0'; cout << s << endl; } return 0; }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/57641.html