zoukankan      html  css  js  c++  java
  • 寻找变化前01序列

    问题描述

    给你一个01序列,HDLC协议处理的话,如果出现连续的5个1会补1个0。例如1111110,会变成11111010。

    现在给你一个经过HDLC处理后的01序列,你需要找到HDLC处理之前的01序列。

    例如给你11111010

    你需要输出1111110

    Input

    输入正整数N,表示N例测试。接着输入N组数据,每组输入经过HDLC处理过的01序列(长度小于100)。

    Output

    对每组输入数据,输出HDLC处理前的01序列。

    Sample Input

    2

    11111010

    1111100

    Sample Output

    1111110

    111110

     1 #include <iostream>
     2 #include<string.h>
     3 #define M 100
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int n;
     9     cin >> n;
    10     while(n--){
    11         char a[M];
    12         char b[M];
    13         memset(a,0,sizeof(a));
    14         memset(b,0,sizeof(b));
    15         scanf("%s",a);
    16         int len=strlen(a);
    17         int level=0;
    18         int j=0;
    19         for(int i=0;i<len;i++){
    20 
    21                 if(a[i]=='0'){
    22                     b[j++]='0';
    23                     level=0;
    24                 }
    25                 else if(a[i]=='1' && level!=4){
    26                     b[j++]='1';
    27                     level++;
    28                 }
    29                 else if(a[i]=='1' && level==4){
    30                     b[j++]='1';
    31                     level=0;
    32                     i++;
    33                 }
    34         }
    35         //b[j]=0;
    36         printf("%s",b);
    37 
    38     }
    39     return 0;
    40 }

    P.S.这个题也很简单,但是有几个地方需要注意一下(就是我报错的几个地方):

    1.%s时只能用char数组,即string模式,不能用int。如果想用int数组的话可以直接 cin>>a 就行了。但如果是char数组,每个值就是'0';如果是int数组每个值是0;

    2.以后碰到数组,最好还是初始化,直接memset,如果不写这一句,就一定要加上35行的那一句,把输出的数组结尾加个截止符。

    3.如果level从0开始,那直到4时就要准备删除了而不是5(这个仔细想想就能明白,实在不行debug一下就好了)

  • 相关阅读:
    实现自动进行金额汇总
    实现模糊查询
    手电筒查询
    lov的建立
    日历 的建立
    快速创建Folder
    TAB页制作
    堆叠画布
    弹性域的开发
    注销记录的实现
  • 原文地址:https://www.cnblogs.com/xym4869/p/8659853.html
Copyright © 2011-2022 走看看