到目前为止我的代码:
:after
我想找到具有给定总和的对,使得对的元素在不同的行中。
答案 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]);
}
}
}
}
}