youcaiyoujuan @ 2024-02-29 20:03:19
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int a[205][205];
int b[10000];
bool visit[10000];
int main()
{
int n,count = 0,cnt = 0,flag = 0,p = 0;
cin >> n;
for(int i = 0;;i++)
{
if(cin.get() == '\n') break;//回车结束输入
cin >> b[i];//将数据依次存入数组
}
for(int j = 1;j <= n;j++)
for(int m = 1;m <= n;m++)
{
while(b[p] == 0&&visit[p] == 0)//判断压缩码是否为0
{
if(cnt == 0) cnt = 1;//将点阵上的1和0互换进行赋值
else cnt = 0;
visit[p] = 1;//表示已访问
p++;//下一个压缩码
}
a[j][m] = cnt;//对二维数组依次赋值0或1
count++;//依次赋值统计次数
if(count == b[p]&&visit[p] == 0)//若次数满足压缩码
{
count = 0;//次数归为0
if(cnt == 0) cnt = 1;//0和1互换赋值
else cnt = 0;
visit[p] = 1;
p++;//下一个压缩码
}
}
for(int k = 1;k <= n;k++)
{
for(int l = 1;l <= n;l++)
cout << a[k][l];
cout << endl;
}
return 0;
}
by Hagasei @ 2024-02-29 20:08:21
@youcaiyoujuan 数据最后没有换行。应把输入写成
for(int i = 0; cin>> b[i] ;i++) ;
by Hagasei @ 2024-02-29 20:09:05
cin
会返回是否读入成功
by 杜都督 @ 2024-02-29 20:12:54
for(int i = 0;i<n*n;i++)
{
//if(cin.get() == '\n') break;//回车结束输入
cin >> b[i];//将数据依次存入数组
}
by zhangyicheng1010 @ 2024-02-29 20:16:05
直接捧代码:
#include<bits/stdc++.h>//万能头
using namespace std;
int n,a,t;//基本的定义,不用管
bool s;
int main(){
cin>>n;
while(cin>>a){//不知道输入几个就一直输入
for(int i=1;i<=a;i++){
cout<<s;
t++;//计数器:目前输入了几个数
if(t%n==0){\\当它一行满了时,就换行
cout<<endl;
}
}
s=!s;
}
return 0;
}
by zhangyicheng1010 @ 2024-02-29 20:17:04
@youcaiyoujuan
by youcaiyoujuan @ 2024-02-29 20:20:16
@杜都督 如果输入的压缩码有多个0怎么办,不是回车结束输入吗
by youcaiyoujuan @ 2024-02-29 20:21:03
@DAVID1010 题解我看过,我想知道此代码为什么会超时
by youcaiyoujuan @ 2024-02-29 20:22:33
@Hagasei 太感谢了
by 杜都督 @ 2024-02-29 21:10:32
@youcaiyoujuan
没太理解你的意思,像我这样改是可以AC的,因为原码就是n*n位,那么索性就接收n*n位压缩码输入,这样是不会出错的,就算多余出若干次没有输入的循环也不会影响后续代码
by Steve15312 @ 2024-10-27 09:03:05
洛谷上的回车不是\n,是两个字符\r\n,所以检测\n结束输入结束不了