[英]Segmentation Fault [2D array]
#include <iostream>
using namespace std;
void input_Array(char (&A)[10][10], int x, int y);
int calc_Collision(char (&A)[10][10]);
void display(char (&A)[10][10]);
void init_Array(char (&A)[10][10]);
int main()
{
int m,n,test;
char A[10][10];
init_Array(A);
cin>>test;
while (test>0)
{
cin>>m>>n;
input_Array(A,m,n);
display(A);
cout<<"FLAG";
cout<<calc_Collision(A);
test--;
}
}
//Calculates no. of ways to select two 1's in each column
int calc_Collision(char (&A)[10][10])
{
int count=0;
int sum=0;
int select(int x, int y);
for (int j = 0; j<10; j++)
{
count=0;
for(int i = 0; i<10; i++)
{
if (A[i][j]=='1')
{
count++;
}
}
sum=sum + select(count,2);
}
return sum;
}
//Returns no. of ways to select y items from x items
int select(int x, int y)
{
int fact(int a);
return (fact(x)/(fact(y)*fact(x-y)));
}
//Returns a!
int fact(int a)
{
if (a==0)
{
return 1;
}
else
{
return (a*fact(a-1));
}
}
void display(char (&A)[10][10])
{
for (int i=0; i<10; i++)
{
for (int j=0; j<10; j++)
{
cout<<A[i][j]<<"\t";
}
cout<<"\n";
}
}
没有。 试验
没有。 行数(空格) 列数
第1行(无空格,只能为1或0)
第2行...
2D阵列
总数 每列中选择两个的方式
程序显示足够精细的数组。
但是在遇到calc_Collision(A)时,代码输出:
分段故障(核心已转储)
不显示“标志”。
这里还是一个初学者,因此将不胜感激。
int select(int x, int y){
int fact(int a);
return (fact(x)/(fact(y)*fact(x-y)));
}
int fact(int a){
if (a==0) {
return 1;
}
else {
return (a*fact(a-1));
}
}
请注意,如果select
x
小于2,则fact(xy)
将无限期地调用自身。 这是因为变量a
fact
将为负。 当输入数组的大小少于10列时,会发生这种情况,导致最后一列变为空。 这将导致calc_Collision
中count
的迭代变为0。 如果输入有10列,则不会发生分段错误。 由于仅计算nC2(N选择2),因此select
函数可以重写为:
int select(int x){
return (x*(x-1))/2;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.