Extra-terrestrial Intelligence
2023-12-17 21:47:30
题目名字
Extra-terrestrial Intelligence
题意
给定一01序列,试问其中的 1 是否等距.若等距则输出YES,否则输出NO
思路
- 该代码首先检查字符串 aa 是否全为 ‘1’,如果是,则结束。否则,它开始处理字符串,将所有连续的 ‘0’ 视为一个单一的 ‘0’,并记录下每个 ‘1’ 后面跟随的 ‘0’ 的数量。
- 接下来,它创建一个名为 temp 的数组,用于存储每个 ‘1’ 后面跟随的 ‘0’ 的数量。同时,它还检查每个 ‘0’ 是否出现在一个 ‘1’ 的后面。如果不是,则输出 “NO”,否则继续处理。
- 最后,它检查 temp 数组中的每个元素是否都出现在其对应 ‘1’ 的后面,如果不是,则输出 “NO”。如果是,则输出 “YES”。
坑点
- 检查整个字符串是否全为 ‘1’。如果输入的字符串包含其他字符,或者不是全为 ‘1’,代码可能无法正确处理。
算法一:XX+XX
字符串处理:它处理输入的字符串 aa,将其中的连续 ‘0’ 视为一个 ‘0’。
实现步骤
- 读取输入:代码首先从标准输入读取一个整数 nn 和一个字符串 aa。
- 处理字符串:使用一个循环,将字符串中的连续 ‘0’ 视为一个 ‘0’。
- 计算零的个数:使用另一个循环,计算每个 ‘1’ 后面跟随的 ‘0’ 的数量,并存储在 temp 数组中。
代码
#include <iostream>
#include <string.h>
using namespace std;
int main() {
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int n;
cin>>n;
char a[n];
int temp[n];
cin>>a;
int n1=n;
for(int i=n1-1;i>=0;i--){
if(a[i]=='1'){
break;
}
else if(a[i]=='0'){
n--;
}
}
for(int j=0;j<n;j++){
if(a[j]=='1'){
if(j==n-1){
temp[j]=0;
}
for(int k=j+1;k<n;k++){
if(a[k]=='1'){
temp[j]=k-j-1;
break;
}
}
}
else if(a[j]=='0'){
temp[j]=-1;
}
}
for(int i=0;i<n;i++){
if(temp[i]!=-1){
for(int j=i+1;j<n-1;j++){
if(temp[j]!=temp[i]&&temp[j]!=-1){
cout<<"NO"<<endl;
return 0;
}
}
}
}
cout<<"YES"<<endl;
return 0;
}
文章来源:https://blog.csdn.net/2301_81135929/article/details/135049525
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!