fengfenglong @ 2022-09-14 13:32:38
#include <iomanip>
#include <stdio.h>
#include <bits/stdc++.h>
#include <math.h>
#include <string>
#include <cstring>
using namespace std;
//#define PI 3.1415926
int a[500][500];
int main()
{
int N,X,jishu = 0,q = 0,flag = 1,hang = 1,lie = 1,tuichu = 0;
cin >> N;
while(cin >> X)
{
if(flag%2 == 0)
{
q = 1;
flag ++;
}
else
{
q = 0;
flag ++;
}//判断输入是1还是0;
for(int i = hang;i <= N;i++)
{
for(int j = lie;j <= N;j++)
{
a[i][j] = q;
cout <<hang<<' '<< i <<' ' <<j<<' '<<q<<endl;
lie += 1;
jishu++;
if(j == N) hang++;
if(jishu == X)
{
if(lie == N+1)
{
lie = 1;
tuichu = 1;
jishu = 0;
break;
}
else
{
lie = j + 1;
tuichu = 1;
jishu = 0;
break;
}
}
}
if(tuichu == 1)
{
tuichu = 0;
break;
}
else
{
hang++;
}
}//填充1和0
}
for(int i = 1;i <= N;i++)
{
for(int j = 1;j <= N;j++)
{
cout << a[i][j];
}
cout << endl;
}//输出结果
return 0;
}
by fengfenglong @ 2022-09-14 13:40:48
这是我修改之后的代码可以显示前几行了但后几行还是显示不出来
#include <iomanip>
#include <stdio.h>
#include <bits/stdc++.h>
#include <math.h>
#include <string>
#include <cstring>
using namespace std;
//#define PI 3.1415926
int a[500][500];
int main()
{
int N,X,jishu = 0,q = 0,flag = 1,hang = 1,lie = 1,tuichu = 0;
cin >> N;
while(cin >> X)
{
if(flag%2 == 0)
{
q = 1;
flag ++;
}
else
{
q = 0;
flag ++;
}//判断输入是1还是0;
for(int i = hang;i <= N;i++)
{
for(int j = lie;j <= N;j++)
{
a[i][j] = q;
cout << X <<' '<<hang<<' '<< i <<' ' <<j<<' '<<q<<endl;
lie += 1;
jishu++;
if(j == N)
{hang++;
lie = 1;
}
if(jishu == X)
{
if(lie == N+1)
{
lie = 1;
tuichu = 1;
jishu = 0;
break;
}
else
{
lie = j + 1;
tuichu = 1;
jishu = 0;
break;
}
}
}
if(tuichu == 1)
{
tuichu = 0;
break;
}
}//填充1和0
}
for(int i = 1;i <= N;i++)
{
for(int j = 1;j <= N;j++)
{
cout << a[i][j];
}
cout << endl;
}//输出结果
return 0;
}
by xqqQwQ_ @ 2022-09-14 13:41:14
稍等,我看一下。
by xqqQwQ_ @ 2022-09-14 13:57:10
@fengfenglong
好的,找到问题了
注意您代码的第49行。
这里是有问题的,如果j正好等于N,那么您会先把lie的值改为1,那么在这里的时候您这句lie=j+1就会把lie的值改为j+1,因为j=n,所以lie的值就变成了n+1,这是不可能的。
解决方法也不难,就是判断那里j是否等于N即可。
by fengfenglong @ 2022-09-14 13:57:22
@LiMLE 我在第一个行的for循环里面到输入到“4”这个数字后程序就突然跑飞了,不正常运行了,我在hang的循环里面输出"hang",跑着跑着乱码了
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <bits/stdc++.h>
#include <math.h>
#include <string>
#include <cstring>
using namespace std;
//#define PI 3.1415926
int a[500][500];
int main()
{
int N,X,jishu = 0,q = 0,flag = 1,hang = 1,lie = 1,tuichu = 0;
cin >> N;
while(cin >> X)
{
if(flag%2 == 0)
{
q = 1;
flag ++;
}
else
{
q = 0;
flag ++;
}//判断输入是1还是0;
for(int i = hang;i <= N;i++)
{
cout << hang <<' ';
for(int j = lie;j <= N;j++)
{
a[i][j] = q;
cout << X <<' '<<hang<<' '<< i <<' ' <<j<<' '<<q<<endl;
lie += 1;
jishu++;
if(j == N)
{hang++;
lie = 1;
}
if(jishu == X)
{
if(lie == N + 1)
{
lie = 1;
tuichu = 1;
jishu = 0;
break;
}
else
{
lie = j + 1;
tuichu = 1;
jishu = 0;
break;
}
}
}
if(tuichu == 1)
{
tuichu = 0;
break;
}
}//填充1和0
}
for(int i = 1;i <= N;i++)
{
for(int j = 1;j <= N;j++)
{
cout << a[i][j];
}
cout << endl;
}//输出结果
return 0;
}
by xqqQwQ_ @ 2022-09-14 13:58:02
#include <iomanip>
#include <stdio.h>
#include <bits/stdc++.h>
#include <math.h>
#include <string>
#include <cstring>
using namespace std;
//#define PI 3.1415926
int a[500][500];
int main()
{
int N,X,jishu = 0,q = 0,flag = 1,hang = 1,lie = 1,tuichu = 0;
cin >> N;
while(cin >> X)
{
if(flag%2 == 0)
{
q = 1;
flag ++;
}
else
{
q = 0;
flag ++;
}//判断输入是1还是0;
for(int i = hang;i <= N;i++)
{
for(int j = lie;j <= N;j++)
{
a[i][j] = q;
cout << X <<' '<<hang<<' '<< i <<' ' <<j<<' '<<q<<endl;
lie += 1;
jishu++;
if(j == N)
{hang++;
lie = 1;
}
if(jishu == X)
{
if(lie == N+1)
{
lie = 1;
tuichu = 1;
jishu = 0;
break;
}
else
{
if(j==N) lie=1;
else lie=j+1; //注意这两行。
tuichu = 1;
jishu = 0;
break;
}
}
}
if(tuichu == 1)
{
tuichu = 0;
break;
}
}//填充1和0
}
for(int i = 1;i <= N;i++)
{
for(int j = 1;j <= N;j++)
{
cout << a[i][j];
}
cout << endl;
}//输出结果
return 0;
}
这是改完之后的code
by xqqQwQ_ @ 2022-09-14 13:59:05
@fengfenglong
是的,输入4之后您的程序中的lie就会刚好变成N+1,超出了边界,这会带来不可预知的错误。
by fengfenglong @ 2022-09-14 14:14:13
@LiMLE 这样可以得到示列正确的结果了,但大佬你加的这句我想表达意思就是在40行中括号内想表达的意思,为什么我的不行呢?我把括号改为lie == N依然得不到正确结果,但我在32行中已经表示了lie随j一起变化,为什么lie写在if括号中就不能当作了判断条件,而只能写j?
by xqqQwQ_ @ 2022-09-14 14:17:06
@fengfenglong
因为您之前写了一个if:
if(j == N){
hang++;
lie = 1;
}
这一句话会在j=N时把lie改成1.
这样如果在J=N是刚好走完的话。lie就不是跟着j一起了,而是变成了1.
可能我讲的不是很清楚,但是您可以感性理解一下。
by fengfenglong @ 2022-09-14 14:20:05
@LiMLE 谢谢,确实没有注意到,还需要多学习。
by huihui_qwq @ 2022-09-14 15:39:40
@fengfenglong 您的头文件不用写那么多,bits/stdc++.h
已经包含了所有头文件了。