大佬们,这个循环好像跳不出去,麻烦有空看一看,谢谢

P1319 压缩技术

sdufezqh @ 2023-10-25 07:39:56

#include<stdio.h>
int main()
{
int i=0,n,j,m,l;
scanf("%d",&n);
for(i=0;i<n*n;)
{
    scanf("%d %d",&m,&l);//为实现0,1交替,我一次性输入两个数
    if(m==NULL)//如果第一个数是空,直接结束程序运行
    return 0;
    else if(n==NULL)//如果第二个数是空,只进行第一个数
    {
    for(j=0;j<m;j++)//输出m(刚才输入第一个数)个0
    {
        printf("0");
        i++;
        if(i==n)
        {
        printf("\n");//如果位数超过n,换行
        i=0;//重新计数
        }
    }
    return 0;//结束程序运行
    }
    else//两个数都不是空,输出m个0,n个1,道理同上,不跳出循环
    {
    for(j=0;j<m;j++)
    {
        printf("0");
        i++;
        if(i==n)
        {
        printf("\n");
        i=0;
        }
    }
    for(j=0;j<l;j++)
    {
        printf("1");
        i++;
        if(i==n)
        {
        printf("\n");
        i=0;
        }
    }
    }
}
return 0;
}

by sdufezqh @ 2023-10-25 07:42:56

谢谢大家


by Bai_Kking @ 2023-10-25 08:54:39

@sdcjdxzqh1 换行和重新计数那里有点问题,因为 i 作为 for 循环的变量,不能赋为 0,新开一个 cnt 计数就好了。

#include<bits/stdc++.h> 
int main()
{
    int i=0,n,j,m,l;
    int cnt=0;
    scanf("%d",&n);
    for(i=0;i<n*n;)
    {
        scanf("%d %d",&m,&l);//为实现0,1交替,我一次性输入两个数
        if(m==NULL)//如果第一个数是空,直接结束程序运行
        return 0;
        else if(n==NULL)//如果第二个数是空,只进行第一个数
        {
            for(j=0;j<m;j++)//输出m(刚才输入第一个数)个0
            {
                printf("0");
                i++,cnt++;
                if(cnt==n)
                {
                    printf("\n");//如果位数超过n,换行
                    cnt=0;//重新计数
                }
            }
            return 0;//结束程序运行
        }
        else//两个数都不是空,输出m个0,n个1,道理同上,不跳出循环
        {
            for(j=0;j<m;j++)
            {
                printf("0");
                i++,cnt++;
                if(cnt==n)
                {
                    printf("\n");
                    cnt=0;
                }
            }
            for(j=0;j<l;j++)
            {
                printf("1");
                i++,cnt++;
                if(cnt==n)
                {
                    printf("\n");
                    cnt=0;
                }
        }
        }
    }
    return 0;
}

by Bai_Kking @ 2023-10-25 08:56:24

@sdcjdxzqh1 除此之外还有一点问题,给你一个数据吧~

input:
5 0 5 2 1 2 5 2 1 2 5 

output:
11111
00100
11111
00100
11111

by Bai_Kking @ 2023-10-25 09:22:27

@sdcjdxzqh1 还有问题:

  1. 当输入有0的时候会直接 return 0

  2. 后面输入的数量不确定,准确来说是奇偶性不确定


by Bai_Kking @ 2023-10-25 09:31:50

可以看一下我的代码

#include<bits/stdc++.h>
using namespace std; 
int main(){
    int n,m;
    int i=0,cnt=0;//i:记录当前输入第i个的数值 
    scanf("%d",&n);
    while(scanf("%d",&m)!=EOF){//可以理解为一直输入,直到没有可以输入为止
        if(i%2==0){//判断该输出0还是输出1 
            for(int j=1;j<=m;j++){
                printf("0");
                cnt++;
                if(cnt==n){
                    printf("\n");
                    cnt=0;
                }
            }
        }
        else{
            for(int j=1;j<=m;j++){
                printf("1");
                cnt++;
                if(cnt==n){
                    printf("\n");
                    cnt=0;
                }
            }
        }
        i++;//每次个数+1
    }
    return 0;
}

by sdufezqh @ 2023-10-25 09:42:37

@Bai_Kking 谢谢,我改一改,麻烦您了


by sdufezqh @ 2023-10-25 15:49:20

@Bai_Kking 谢谢您,我改明白了


|