为啥只有20分??回复必关注!

P1320 压缩技术(续集版)

heathera @ 2024-09-15 23:41:47

这段代码我自己咋试咋对,但是测试点只有6和7过了,为啥啊??

#include<stdio.h>
#include<string.h>
int main()
{
    //输入字符串,并把字符串拼接起来
    char str[200],test[40000];
    scanf("%s",str);
    int n=strlen(str);
    strcat(test,str);//把第一行字符数组str拼接到test中,单独拼第一行的目的是得到字符串的长度(即n的值)
    for(int i=2;i<=n;i++)//第一行已经拼了,从第二行开始
    {
        scanf("%s",str);
        strcat(test,str);
    }
    printf("%d ",n);

    //比较字符数组中相邻的字符是否相同,同时注意从0开始
    int time=0;
    for(int i=0;i<n*n;i++)
    {
        int count=0;
        if(time==0&&i==0)//检查第一个数是不是1,如果是1要跳过1的部分,但是能且仅能跳过开头的一次
        {
            if(test[i]!='0')
            printf("0 ");
            {
                for(;test[i]!='0';)
                {
                    time++;
                    i++;
                }
            }
        }
        while(test[i]==test[i+1])
        {
            count++;
            i++;
        }
        if(count!=0)//数表全1时需要特判
            printf("%d ",count+1);//有m对数字比较相同,则共m+1个相同数字
        else
            printf("%d ",count);
    }
    return 0;
}

/*
先把所有数码暂存在字符数组str里,再使用strcat冲掉换行符并逐行拼接字符串进text中;
输出边长n;
搞一个循环,循环条件就是i<n*n;
然后逐个比较当前数组元素与下一元素,如果相同则count++;如果不同则count+1后跳出循环(例如0001就是count++两次再+1就跳出循环);然后输出count
(注意每次循环要把count归零)
*/

by liyoulin @ 2024-09-16 00:21:12

给你一组测试数据:

输入:

1 1

1 0

正确输出:

2 0 3 1

你的输出:

2 0 0


by liyoulin @ 2024-09-16 00:21:43

@heathera


by liyoulin @ 2024-09-16 00:29:53

#include<stdio.h>
#include<string.h>
int main()
{
    char str[200],test[40000];
    scanf("%s",str);
    int n=strlen(str);
    strcat(test,str);
    for(int i=2;i<=n;i++)
    {
        scanf("%s",str);
        strcat(test,str);
    }
    printf("%d ",n);
    int now=0;
    for(int i=0;i<n*n;){
        int count=0;
        while(test[i]-'0'==now){
            count++;
            i++;
        }
        now=(now+1)%2;
        printf("%d ",count);
    }
    return 0;
}

改后的代码

自行理解


|