题目出处:http://codeforces.com/problemset/problem/96/A
灵灵非常喜欢足球。
有一天,灵灵正在看一场足球比赛,在看比赛的同时灵灵在纸上写下了每一位运动员当前的位置。
为了简化所有运动员的位置的描述,灵灵将其简化成了仅由字符 "0" 和 "1" 描述的一个字符串。
每一个 "0" 表示主队的一个运动员,每一个 "1" 表示客队的一个运动员。
如果当前的位置中存在连续的7个运动员是同一个队伍的,那么我们将这个状态称为危险状态。
举个例子,状态 “00100110111111101” 是危险状态,而状态 “11110111011101” 不是危险状态。
给你一个当前灵灵描绘出来的所有运动员的位置,请确认这个状态是不是危险状态。
输入包含一个字符串,用于表示灵灵描绘出的所有运动员的位置。(字符串长度不会超过100)
如果所有运动员的位置是一个危险状态,输出“YES”;否则,输出“NO”。
001001
NO
1000000001
YES
这道题目很明显了,其实就是给你一个字符串 s ,确定字符串中是不是存在 7 个连续的 "0" 或者 7 个连续的 "1"。
所以我们可以开一个变量 cnt 来记录:
每当我们当前遍历的字符串和前一个字符串不一样(或者当前字符串是第0个字符串),我们将 cnt 置为 1;
每当我们当前遍历的字符串和前一个字符串一样,我们将 cnt ++;
如果某一个时刻 cnt >= 7,则说明是危险状态;如果遍历完字符串 cnt 都没能达到 7,则说明不是危险状态。
使用 char 数组实现的代码如下:
#include <bits/stdc++.h>
using namespace std;
char ch[110];
int cnt;
int main() {
cin >> ch;
for (int i = 0; ch[i]; i ++) {
if (!i || ch[i] != ch[i-1]) cnt = 1;
else {
cnt ++;
if (cnt >= 7) {
puts("YES");
return 0;
}
}
}
puts("NO");
}
使用 string 实现的代码如下:
#include <bits/stdc++.h>
using namespace std;
string s;
int cnt;
int main() {
cin >> s;
int n = s.length();
for (int i = 0; i < n; i ++) {
if (!i || s[i] != s[i-1]) cnt = 1;
else {
cnt ++;
if (cnt >= 7) {
puts("YES");
return 0;
}
}
}
puts("NO");
return 0;
}
原文:https://www.cnblogs.com/zifeiynoip/p/11450573.html