one_leukocyte @ 2022-01-28 10:28:05
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int main()
{
int N;//N×N点阵
cin>>N;
int num;//输入连续1或者0的个数
int flag=0;//判断为0还是1
int a[205][205];//输出的数组
memset(a,0,sizeof(a));//初始化数组
int n=1;//列位置
int line=1;//行位置
int j=1;//记录循环次数
while(j<=N*N)
{
cin>>num;
if(flag==0)
{
for(int i=1; i<=num; i++) //连续填入数字的个数
{
if(n<=N)
{
a[line][n]=0;
n++;
}
else
{
n=1;
line+=1;
a[line][n]=0;
}
j++;
}
flag=1;
}
else
{
for(int i=1; i<=num; i++) //连续填入数字的个数
{
if(n<=N)
{
a[line][n]=1;
n++;
}
else
{
n=1;
line++;
a[line][n]=1;
}
j++;
}
flag=0;
}
}
for(int i=1; i<=N; i++)
{
for(int j=1; j<=N; j++)
cout<<a[i][j];
cout<<endl;
}
return 0;
}
WA掉9个求助dalao
by xzy090626 @ 2022-01-28 10:57:31
你这个代码连样例都过不去啊
by xzy090626 @ 2022-01-28 11:12:25
先给您的代码提几点建议:
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int a[205][205];
int main()
{
int N;
cin>>N;
int num;
bool flag=0;//改成bool
int n=1,line=1,j=1;
while(j<=N*N)
{
cin>>num;
//if-else可以去掉
for(int i=1; i<=num; i++)
{
if(n<=N)
{
a[line][n]=flag;
n++;
}
else
{
n=1;
line++;
a[line][n]=flag;
}
j++;
}
flag=!flag;//最后取反
}
for(int i=1; i<=N; i++)
{
for(int j=1; j<=N; j++)
cout<<a[i][j];
puts("");
}
return 0;
}
关于本题,事实上可以使用一维数组(而不是二维的),这样既不用特判换行的时候,还好理解。\ 我的代码:
#include<bits/stdc++.h>
using namespace std;
bool s[30000],b;
int k;
int main(){
int n;
cin>>n;
int t = n*n;
int c;
while(t>0){
scanf("%d",&c);
t -= c;
for(int i = 0;i<c;++i) s[k++] = b;
b = !b;
}
for(int i = 0;i<k;++i){
printf("%d",s[i]);
if((i+1)%n==0) printf("\n");
}
return 0;
}
最后顺祝新年快乐!
by xzy090626 @ 2022-01-28 11:13:29
@xzhqwys
by xzy090626 @ 2022-01-28 11:15:34
(其实我也没看懂您的代码为什么不对,所以也没改对,但是底下那个代码可供参照)
by one_leukocyte @ 2022-01-28 16:57:04
@xzy090626 感谢,祝你也新年快乐,代码全AC