Extra-terrestrial Intelligence

2023-12-17 21:47:30

题目名字

Extra-terrestrial Intelligence

题意

给定一01序列,试问其中的 1 是否等距.若等距则输出YES,否则输出NO

思路

  1. 该代码首先检查字符串 aa 是否全为 ‘1’,如果是,则结束。否则,它开始处理字符串,将所有连续的 ‘0’ 视为一个单一的 ‘0’,并记录下每个 ‘1’ 后面跟随的 ‘0’ 的数量。
  2. 接下来,它创建一个名为 temp 的数组,用于存储每个 ‘1’ 后面跟随的 ‘0’ 的数量。同时,它还检查每个 ‘0’ 是否出现在一个 ‘1’ 的后面。如果不是,则输出 “NO”,否则继续处理。
  3. 最后,它检查 temp 数组中的每个元素是否都出现在其对应 ‘1’ 的后面,如果不是,则输出 “NO”。如果是,则输出 “YES”。

坑点

  1. 检查整个字符串是否全为 ‘1’。如果输入的字符串包含其他字符,或者不是全为 ‘1’,代码可能无法正确处理。

算法一:XX+XX

字符串处理:它处理输入的字符串 aa,将其中的连续 ‘0’ 视为一个 ‘0’。

实现步骤
  1. 读取输入:代码首先从标准输入读取一个整数 nn 和一个字符串 aa。
  2. 处理字符串:使用一个循环,将字符串中的连续 ‘0’ 视为一个 ‘0’。
  3. 计算零的个数:使用另一个循环,计算每个 ‘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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。