求助为什么自己测试发现循环没错但是进去之后没按我写的赋值啊

P1319 压缩技术

momo36524 @ 2024-02-29 17:04:47

#include<stdio.h>
#include<stdbool.h>
int main(void){
    int n,if_is_0,if_is_1,i,j,k,mark,pointer=0;
    int counter=0;
    char outcome[40000];
    scanf("%d",&n);

    mark=1;//用于标记解码后的是1还是0 
    while(counter<n*n){
        scanf("%d",&k);
        counter+=k;
        if(mark%2==0){
            for(j=0;j<k;j++){
                outcome[pointer]=1;
                pointer++;
                printf("wrong1 mark=%d outcome[%d]=%d\n",mark,pointer,outcome[pointer]);
            }

        }
        else{
            for(j=0;j<k;j++){
                outcome[pointer]=0;
                pointer++;
                printf("wrong0 mark=%d outcome[%d]=%d\n",mark,pointer,outcome[pointer]);
            }

        } 
        mark++;
    }

    pointer=0;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++,pointer++)
            printf("%d",outcome[i]);
        printf("\n");
    }
    return 0;
}

by momo36524 @ 2024-02-29 17:24:36

看来题解之后重新写了一个 能过6个测试点 其他的tle了 但是目前最困扰我的还是帖子上的问题 谢谢大家QAQ

#include<stdio.h>
int main(void){
    int n,i,j,k,counter,mark=0;
    int input[22];
    scanf("%d",&n);

    for(counter=0,i=0;counter<n*n;i++){
        scanf("%d",&input[i]);
        counter+=input[i];
    }
    //对于解码数字的读入没有问题 
    for(j=0;j<i;j++){
        for(k=0;k<input[j];k++){
            if(j%2==0)
                printf("%d",0);
            else printf("%d",1);
            mark++;//输出格式没有问题,mark算法一块没有问题 
            if(mark==n){
                mark=0;
                printf("\n");
            }
        }
    }

    return 0;
}

by Louis_lxy @ 2024-02-29 18:03:11

这题怎么说呢实在太简单了,你直接用bool来输出记得能整除 n 的时候要记得输出换行就行啦


by Louis_lxy @ 2024-02-29 18:08:06

核心代码的伪代码:

定义变量
输入n
while(输入数据)
{
  for (循环k次(k为输入数据))
  {
    次数加一
    输出0或1
    if (cnt整除n)
      输出换行
  }
  bool变量取反
}

by momo36524 @ 2024-03-02 10:57:30

@ldh270657080 好的 谢谢!


by momo36524 @ 2024-03-05 17:27:59

@ldh270657080 最近事情比较多 现在才改完 终于AC了 感谢巨佬

#include<stdio.h>
int main(void){
    int i,j,k,n,if_is_0=1;
    int counter=0;
    int column=0;
    scanf("%d",&n);
    while(counter<n*n){
        scanf("%d",&k);
        counter+=k;
        if(if_is_0==1){
            for(i=0;i<k;i++){
                printf("%d",0);
                column++;
                if(column==n){
                    printf("\n");
                    column=0;
                }
            }
        }
        else{
            for(i=0;i<k;i++){
                printf("%d",1);
                column++;
                if(column==n){
                    printf("\n");
                    column=0;
                }
            }
        }
        if_is_0=!if_is_0;

    }

    return 0;
}

|