2015-04-17 58 views
0

交換數組的值我不清楚如何解決。根據索引

main() 
{ 
    int a[10],n,i,j,temp1,max,temp[10]; 
    clrscr(); 

    scanf("%d",&n); 
    for (i = 0 ; i < n ; i++) 
     scanf("%d",&a[i]);  
    for (i = 0 ; i < n ; i++) 
    { 
     temp[1] = a[0]; 
     temp[2] = a[temp[1]]; 
     a[temp[1]] = 0; 
     temp[3] = a[temp[2]]; 
     a[temp[2]] = temp[1]; 
     temp[4]=a[temp[3] ]; 
     a[temp[3]]=temp[2]; 
    } 

    for (i = 0 ; i < n ; i++) 
     printf("%d",a[i]); 
    getch(); 
} 

輸入:3

2 0 1 

輸出

1 2 0 

但更多的我沒有下架。

like input: 6 
4 3 0 5 1 2 

Output 
2 4 5 1 0 3 

邏輯: 採取的陣列等

i 0 1 2 

a[i] 2 0 1 

邏輯是a[i]前進到數組的索引和數組值進行到它的索引。

a[0]=2 and index is 0 
so after apply logic the element of a[2]=0 
then 
a[1]=0 so it goes to a[0]=1 
and so on.. 
and also 
apply it for "430512" to "245103" 
+3

您的邏輯不清楚。目前還不清楚預期產出是什麼。 –

+0

這就完全不安全,就好像'a [i]'的值是像'100245'或其他一些大數字(或負數)那樣大的東西,你的邏輯(據我瞭解)就會失敗。你可能需要一個非常大的數組,否則你將不得不限制用戶的輸入。 –

回答

0

嘗試用你的第二個for循環更換以下for循環:

for (i = 0 ; i < n ; i++) { 
    temp[a[i]]=i;  
} 

,然後打印數組temp

+0

爲什麼?爲什麼會這樣工作? –

+0

據我所知,他希望elementh的索引值被分配給元素的索引。例如, 輸入:430512例如第一個元素4和它的索引0然後他希望第四個索引被分配爲0 – mugetsu

0

你的代碼不工作,因爲它是靜態的。你必須創造動態的方式。 此代碼適用於4 3 0 5 1 2

main() 
{ 
    int a[10],n,i,j,temp1,max,temp[10], result[10]; 

    scanf("%d",&n); 
    for (i = 0 ; i < n ; i++) 
     scanf("%d",&a[i]);  
    for (i = 0 ; i < n ; i++) 
    { 
     for (j = 0 ; j < n ; j++) 
     { 
      if(i == a[j]) 
      { 
       result[i]=j; 
       break; 
      } 
     } 
    } 

    for (i = 0 ; i < n ; i++) 
     printf("%d",result[i]); 
    getch(); 
} 
+0

動態?靜態的?什麼? –

+0

謝謝,我得到了結果。 – ashwani