为什么这个程序没有在数组中找到总和为给定值的对?

时间:2017-06-22 07:27:10

标签: c matrix

到目前为止我的代码:

:after

我想找到具有给定总和的对,使得对的元素在不同的行中。

4 个答案:

答案 0 :(得分:1)

请注意a是一个5x5数组,附加一列零。这有一个良性的影响。

您的算法有问题!如果您将条件调整为

if (a[i][j] + a[j][i] == sum && i != j) {
    printf("Yes %d %d\n", i, j);
} else {
    printf("No %d %d\n", i, j);
}
很明显,你没有考虑所有可能的一对的总和。错过的是那些总和为11的对。

基本上你需要4个嵌套循环,你需要考虑数组中每个其他数字的每个数字。

答案 1 :(得分:0)

首先,您应该注意到您定义了5X5 int array但在每个子数组中只填充了4 ints。如果要打印出阵列,您会看到值为:

-1      2       3       4       0
5       3       -2      1       0
6       7       2       -3      0
2       9       1       4       0
2       1       -2      0       0

我想那不是你的意图......

现在,针对您的问题 - 您希望a[i][j] + a[j][i] == 11找到i!=j。没有输出的原因是因为没有这样的元素满足你定义的数组中的条件。

答案 2 :(得分:0)

如果你想要“具有给定总和的对,使得对的元素在不同的行中。”那么你应该尝试这样的代码:

#include<stdio.h>
int main()
{
  const int rows = 5;
  const int cols = 4;
  int sum = 11;
  int i, j, i1, j1;
  int a[rows][cols] =
  {
    {-1, 2, 3, 4 },
    { 5, 3, -2, 1 },
    { 6, 7, 2, -3 },
    { 2, 9, 1, 4 },
    { 2, 1, -2, 0 }
  };
  for(i = 0; i < rows; i++)
    for(j = 0; j < cols; j++)
      for(i1 = i + 1; i1 < rows; i1++)
        for(j1 = 0; j1 < cols; j1++)
          if(a[i][j] + a[i1][j1] == sum)
             printf("[%d %d](%d); [%d %d](%d)\n", i, j, a[i][j], i1, j1, a[i1][j1]);
}

答案 3 :(得分:0)

以下程序将解决您的问题,

#include<stdio.h>
int main()
{
        int a[5][5] = {
        {-1, 2, 3, 4 },
        { 5, 3, -2, 1 },
        { 6, 7, 2, -3 },
        { 2, 9, 1, 4 },
        { 2, 1, -2, 0 }
    };
        int sum=11,i,j,k,l;
        for(i=0;i<5;i++)
        {
                for(j=i+1;j<5;j++)
                {
                        for(k=0;k<5;k++)
                        {
                                for(l=0;l<5;l++)
                                {
                                        if(a[i][k]+a[j][l]==sum)
                                                printf("a[%d][%d] = %d\ta[%d][%d] = %d\n",i,k,a[i][k],j,l,a[j][l]);
                                }
                        }
                }
        }
}