题目描述
给你一个 01 序列,HDLC 协议处理的话,如果出现连续的 5 个 1 会补 1 个 0。
例如 1111110,会变成 11111010。
现在给你一个经过 HDLC 处理后的 01 序列,你需要找到 HDLC 处理之前的 01 序列。
例如给你 11111010,你需要输出 1111110。
以下为题解
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char c[20000];
int n,cnt[20000];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
memset(cnt,0,sizeof(cnt));
scanf("%s",c);
int len=strlen(c);
for(int j=0;j<len;j++)
if(c[j]=='1')cnt[j]=(cnt[j-1]+1)%10000;
else cnt[j]=cnt[j-1]%10000>=5?0:10000;
for(int j=0;j<len;j++)
if(cnt[j])printf("%d",c[j]-48);
printf("\n");
}
return 0;
}
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char c[20000];
int n,cnt[20000];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
memset(cnt,0,sizeof(cnt));
scanf("%s",c);
int len=strlen(c);
for(int j=0;j<len;j++)
if(c[j]=='1')cnt[j]=(cnt[j-1]+1)%10000;//记录是第几个1
else cnt[j]=cnt[j-1]%10000>=5?0:10000;//记录0是否需要输出,需要为10000,不需要为0;
for(int j=0;j<len;j++)
if(cnt[j])printf("%d",c[j]-48);
printf("\n");
}
return 0;
}
为啥要模100000呢