C语言中的邻居查找程序代码
指令是编写一个程序,使用二维数组查找比所有相邻元素都大的元素C语言中的邻居查找程序代码,c,for-loop,multidimensional-array,neighbours,C,For Loop,Multidimensional Array,Neighbours,指令是编写一个程序,使用二维数组查找比所有相邻元素都大的元素 For example if my input is: 1 2 11 13 5 6 7 6 9 The output would be: 11, 13, 9 bool neighbourCheck(int array[N+2][N+2], int i, int j) { int l, m; for(l=i-1; l<i+1; l++) {
For example if my input is:
1 2 11
13 5 6
7 6 9
The output would be: 11, 13, 9
bool neighbourCheck(int array[N+2][N+2], int i, int j)
{
int l, m;
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
{
if(array[l][m]>=array[i][j])
{
return(FALSE);
}
return(TRUE);
}
}
}
出于某种原因,尽管它根本不显示数字。有人能帮我更正代码吗
代码如下:
#include <stdio.h>
#include "genlib.h"
#include "simpio.h"
#define N 3
bool neighbourCheck(int array[N+2][N+2], int i, int j);
void getArray(int array[N+2][N+2]);
main()
{
int array[N+2][N+2], i, j;
printf("This program will ask you to enter nine integers of an aray.\n");
getArray(array);
for (i=1; i<N+1; i++)
{
for(j=1; j<N+1; j++)
{
if(neighbourCheck(array, i, j)==TRUE)
{
printf("%d\t", array[i][j]);
}
}
}
getchar();
}
void getArray(int array[N+2][N+2])
{
int i, j;
for(j=0;j<=N+1;j++)
{
i=0;
array[i][j]=-1;
i=4;
array[i][j]=-1;
}
for(i=1;i<N+1;i++)
{
j=0;
array[i][j]=-1;
j=4;
array[i][j]=-1;
}
for(i=1;i<N+1;i++)
{
for(j=1;j<4;j++)
{
printf("\nEnter a positive integer: ");
array[i][j]=GetInteger();
}
}
}
bool neighbourCheck(int array[N+2][N+2], int i, int j)
{
int l, m;
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
{
if(array[l][m]>=array[i][j])
{
return(FALSE);
}
return(TRUE);
}
}
}
#包括
#包括“genlib.h”
#包括“simpio.h”
#定义n3
布尔邻域检查(int数组[N+2][N+2],int i,int j);
void getArray(int数组[N+2][N+2]);
main()
{
int数组[N+2][N+2],i,j;
printf(“此程序将要求您输入一个数组的九个整数。\n”);
getArray(数组);
对于邻接检查功能中的(i=1;i),以下代码
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
{
if(array[l][m]>=array[i][j])
{
return(FALSE);
}
return(TRUE);
}
}
它将始终为TRUE
,您将返回FALSE
此外,进一步看,返回TRUE
似乎并不是它应该返回的位置。您应该在测试所有可能的组合后才返回TRUE,而不仅仅是第一个组合。尽管这让您惊讶于没有打印数字
针对该评论,一种可能的方法是以下替代方法:
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j+1; m++)
{
if (l == i && m == j)
continue;
if(array[l][m]>=array[i][j])
{
return(FALSE);
}
}
}
return(TRUE);
我想你不是在检查所有的邻居
For example if my input is:
1 2 11
13 5 6
7 6 9
The output would be: 11, 13, 9
bool neighbourCheck(int array[N+2][N+2], int i, int j)
{
int l, m;
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
{
if(array[l][m]>=array[i][j])
{
return(FALSE);
}
return(TRUE);
}
}
}
bool-neighbourCheck(int数组[N+2][N+2],int i,int j)
{
int l,m;
for(l=i-1;lfor(m=j-1;m
在上述针对各种j值的声明中,条件始终为false,因此它不能进入循环。您必须更改零件
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
用于(l=i-1;lso那么我能做些什么来改变它呢?但是如果我这样做了,程序不会在返回TRUE时打印所有的数字吗?不会,因为如果它发现有任何相等或更大的邻域,它会首先返回FALSE
。如果它将自己与所有邻域进行比较并发现它们都相同,它才会返回TRUE
你能更具体地回答你的问题吗?我怎样才能让程序返回正确的值,因为现在它只打印每个数字。现在我使用你的完整代码,它工作了!:)我的代码的另一部分肯定有问题:/噢,别介意,我只是没有正确阅读您的函数……对不起,但非常感谢。如果邻居具有相同的值,则您的解决方案是不正确的。
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
for(l=i-1;l<=i+1;l++)
{
for(m=j-1;m<=j-1;m++)