目录
问题描述:有一个长度为 n 的 01 串,其中有一些位置标记为 ? ,这些位置上可以任意填0 或者 1,请问如何填充这些位置使得这个 01 串中出现互不重叠的 00 和 11子串最多,输出子串个数。
样例说明:如果在问号处填0,则最多出现一个 00和一个 11 : 111000。
话不多说,上代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
问题描述:
有一个长度为 n 的 01 串,其中有一些位置标记为 ? ,这些位置上可以任意填0 或者 1,
请问如何填充这些位置使得这个 01 串中出现互不重叠的 00 和 11子串最多,输出子串个数。
输入格式:
输入一行包含一个字符串。
输出格式:
输出一行包含一个整数表示答案。
样例输入:
1110 ? 0
样例输出:
2
样例说明:
如果在问号处填0,则最多出现一个 00和一个 11 : 111000。
话不多说,上代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/*问题描述:
有一个长度为 n 的 01 串,其中有一些位置标记为 ? ,这些位置上可以任意填0 或者 1,
请问如何填充这些位置使得这个 01 串中出现互不重叠的 00 和 11子串最多,输出子串个数。
输入格式:
输入一行包含一个字符串。
输出格式:
输出一行包含一个整数表示答案。
样例输入:
1110 ? 0
样例输出:
2
样例说明:
如果在问号处填0,则最多出现一个 00和一个 11 : 111000。*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main() {
//定义一个大一点的字符串[char []]存储数据
char s[100001];
//输入
scanf("%s",s);
//获取该字符串长度
int len = strlen(s);
//计数
int count = 0;//计数的初始化为0
//循环,找相同的,并且如果出现就计数
for (int i = 0; i < len; )
{
if (
//注意:这里的 0 1 ? 都是看做字符来判断的,所以都要加上''
(s[i] == '1' && s[i + 1] == '1') ||
(s[i] == '0' && s[i + 1] == '0') ||
(s[i] == '?' && s[i + 1] == '?') ||
(s[i] == '1' && s[i + 1] == '?') ||
(s[i] == '?' && s[i + 1] == '1') ||
(s[i] == '0' && s[i + 1] == '?') ||
(s[i] == '?' && s[i + 1] == '0')
) {
count++;//出现以上状况,计数器自增1
i+=2;//一次性消除两个数字,跨越2
}
else
{
i++;//没有两个在一块能消除的,i只能说自增1,进入下一轮循环判断
}
}
//最后输出结果
printf("%d", count);
return 0;
}