帮我看一下为什么RE了鸭

P1319 压缩技术

YuanZhizheng @ 2019-12-10 13:20:29

这是RE代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[100005];
int main()
{
    int n;
    cin>>n;
    int i;
    int num=0,sum=0;
    for(i=0;;i++)
    {
        scanf("%1d",&a[i]);
        num++;
        sum+=a[i];
        if(sum==n*n)break;
    }
    int flag=0;
    for(i=0;i<num;i++)
    {
        while(a[i]--)
        {

            if(i%2==0)printf("0");
            else printf("1");
            flag++;
            if(flag==n)
            {
                printf("\n");
                flag=0;
            }
        }
    }
    return 0;
}

这个是改用for以后

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[100005];
int main()
{
    int n;
    scanf("%d",&n);
    int i;
    int num=0,sum=0;
    int N=n*n;
    for(i=0;;i++)
    {
        num++;
        scanf("%d",&a[i]);
        sum+=a[i];
        if(sum==N)break;
    }
    int flag=0,j;
    for(i=0;i<num;i++)
    {
        int mid=a[i];
       for(j=0;j<mid;j++)
       {
           if(i%2==0)printf("0");
           else if(i%2==1) printf("1");
            flag++;
            if(flag==n)
            {
                printf("\n");
                flag=0;
            }
       }
    }
    return 0;
}

为什么for的这个ac了,while就会RE


by YuanZhizheng @ 2019-12-10 13:29:02

问题不在while貌似,我把cin改成scanf就ac了,为什么cin用不了呢


by C2022zhangyixiang @ 2019-12-10 14:08:59

cin是流输入,最好不用了,我打代码一般都用scanf和printf

比如这道题

#include<cstdio>
int main()
{
    int M,N,X,used;
    scanf("%d %d %d",&M,&N,&X);
    while (X>0)
    {
        used=(M%N==0)? M/N:M/N+1; 
        if(used>X) 
        {
            break;
        }
        X-=used;
        N+=M/N;
    }
    printf("%d",N);
    return 0;
}

|