2016-05-04 3 views
-3

私は現在C言語でプロジェクトをやっていますが、私はproject.Basically私のメイン配列で最大M個の番号を見つけることを試みている私はID番号を別の配列に持っています。これらの最大番号のID番号は配列内の位置です。ポインタで配列の最大数を見つけてその位置を別の配列に移動

私の主な配列はtresh_arrであり、N個の数字を持っています。数字は2倍です。動作しません

私のコードブロックは次のとおりです。

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; 
}` 

しかし、私のコードは動作し、ちょうど最大数を見つけ、この最大number.WhatのIdは私が何をすべきM回を書いていないのですか?私の欠点があれば、ありがとうと申し訳ありません。続き

+0

デバッガ................. –

+0

配列をソートしてMを最大にするとどうなりますか? – Marievi

答えて

0

は、あなたのプログラムの間違いです:あなたは *(max_arrを行う必要があります

1)は、第2の最後の行には+ I)=最大。私は

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)あなたは1にフラグを設定する必要があり休憩の上、設定する必要はありません少なくとも数MAXを設定する上で//各forloop内部

2)をtmpにありませんそれを再び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]と書くには、どちらもまったく同じで、前の方が冗長すぎる

+0

*(max_arr + i)= tmp私は最大数の位置を取っているので、それはselfではありません。あなたのコードを変更しようとしましたが、それでもまだ動作しません。 – Alperen

+0

そして、(*(max_arr + K)== tresh_arr [J])// tresh_arr [j]の場合J –

+0

によって、この比較 を変更https://gist.github.com/coderabhishek/42bb47c5b4cbb29afd7d62f0dc78e89e は、ここにあなたのコードを参照してください。 –

関連する問題