分割故障[2D阵列]


#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";
  }
}
<标题>输入格式:

。试验

。行(空格)的数目。列的

row1(无空格,只有1或0)

row2…

<标题>输出:

二维数组

总没有。在每一列中选择两个1的方法

<标题>问题:

程序显示数组足够好。

但是当遇到calc_Collision(A)时,代码输出:

段故障(core dump)

"FLAG"未显示。

仍然是一个初学者,所以任何帮助将不胜感激。

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(x-y)将无限地调用自己。这是因为fact中的变量a将是负的。当输入数组的大小少于10列时,会出现这种情况,导致最后一列变为空。这将导致count的迭代在calc_Collision中变为0。如果输入有10列,则不会出现分割故障。由于您只计算nC2 (N选2),因此select函数可以重写为:

int select(int x){
  return (x*(x-1))/2;
}

相关内容

  • 没有找到相关文章

最新更新