我现在用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;
}`
但我的代码不起作用,只找到最大数,然后写这个最大数的Id的M倍。我该怎么办?谢谢你,如果有的话,对我的过错表示歉意。
以下是程序中的错误:
1) 在倒数第二行你应该做*(max_arr+i)=最大值;//非tmp
2) 在每个forloop内,我将最大值设置为最小值
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中,您应该将标志设置为1,而不需要再次将其设置为0,如果您应该检查标志==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]也是很好的,它们完全相同,前面的有点过于冗长