把i初值定为1,5,8,80,800,输出都差不多啊?

P1320 压缩技术(续集版)

乔奈 @ 2020-03-31 15:07:50

#include<stdio.h>
#include<string.h>
int main()
{
    char a[40000], b[200];
    unsigned int n, i, j=1, k=0;
    scanf_s("%s", b);
    n = strlen(b);
    strcat(a, b);
    for (i = 2; i <= n; i++)
    {
        scanf_s("%s", b); 
        strcat(a, b);
    }
    printf("%d", n);
    for (i = 800; i<strlen(a); i++)//这里我改了很多次i的值
    {
        if (a[0] == 1)printf("0");
        if (a[i] == a[i - 1]) { j++; }
        else { printf("%d ", j); j = 1; }
    }
        printf("%d ",j);

}

输入: 11111 00100 11111 00100 11111 差不多每次都输出: 5 400004 1 1 1 1 1 1 1 5 2 1 2 5 2 1 2 5 (答案为0 5 2 1 2 5 2 1 2 5) 有dl能教教我为什么会输出400004和一堆1吗? 感觉智商不够了


by Toclhu @ 2020-03-31 15:14:12

用C++吧


by HearTheWindSing @ 2020-03-31 15:18:45

@乔奈 为啥要设置i呢?我的代码:

#include <bits/stdc++.h>
using namespace std;

int a[200+10];

int main(){
    string s;
    int m=0,n,tot=0;
    bool t=0;
    while (cin >> s){
        int len=s.size();
        n=len;
        for (int i=0;i<len;i++){
            if (t^(s[i]-'0')){
                t=!t;
                a[tot++]=m;
                m=0;
                i--;
            }
            else m++;
        }
    }
    a[tot++]=m;
    printf("%d",n);
    for (int i=0;i<tot;i++){
        printf(" %d",a[i]);
    }
    printf("\n");
    return 0;
}

by 乔奈 @ 2020-03-31 16:22:27

@Oahgnehz 好像在另一个帖子见过你


by ihesro @ 2020-06-26 23:23:06

@乔奈

我的题解,应该比较好懂。

#include <bits/stdc++.h>
using namespace std;
int main(){
    string s[200];cin>>s[0];int n=s[0].size();char cur='0';int sum=0;for(int i=1;i<n;i++)cin>>s[i];
    cout<<n<<' ';
    for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(s[i][j]==cur){
        sum++;
        }else{
        cout<<sum<<' ';
        sum=1;
        cur=s[i][j];
    }
    cout<<sum;
    return 0;
}

|