我现在正在用 C 语言做一个项目,我在项目的一个部分遇到了问题。基本上我试图在我的主数组中找到最大 M 个数字,并且我正在将它们的 ID 号转移到另一个数组中。ID这些最大数字的数字是它们在数组中的位置。
我的主数组是tresh_arr,有N个数字,数字是双倍的。
我的代码块不起作用:
double max=0;
int *max_arr;
int k,tmp,flag=0;
max_arr=calloc(M,sizeof(int));
for(i=0;i<M;i++) //I will find maximum M numbers
{
for(j=0;j<N;j++) //There is a N numbers in my array
{
if( *(tresh_arr+j) > max ) //I'm trying to take the Id numbers to the tresh_arr
{
flag=0;
for(k=0;k<i+1;k++)
{
if( *(max_arr+k)==j )
{
flag=0;
break;
}
else
flag=1;
}
if(flag==1)
{
max = *(tresh_arr+j);
tmp=j;
}
}
}
*(max_arr+i)=tmp;
}`
但是我的代码不起作用,只是找到最大数字并写入 M 乘以该最大数字的 Id。我该怎么办?谢谢您,如果有的话,请为我的错误表示歉意。
最佳答案
以下是您的程序中的错误:
1)在倒数第二行你应该做 *(max_arr+i)=max;//不是临时文件
2)在每个for循环中我将最大数设置为最小数
for(i=0;i<M;i++) //I will find maximum M numbers
{
max =-1; //**********YOU MISSED THIS*****************
for(j=0;j<N;j++) //There is a N numbers in my array
{
3)在上面的break中,你应该将flag设置为1,并且不需要再次将其设置为0,如果你应该检查flag==0,这基本上意味着没有找到元素
for(k=0;k<i;k++)
{
if( *(max_arr+k)==tresh_arr[j] )
{
flag=1;
break;
}
}
if(flag==0)
{
max = *(tresh_arr+j);
tmp=j;
}
在 C 中将 *(A+j) 写为 A[j] 也很好,它们完全相同,前面的有点太冗长了
关于c - 使用指针查找数组中的最大数字并将其位置转移到另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032357/