根据索引交换数组的值

时间:2015-04-17 15:05:58

标签: c

我不清楚如何解决。

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"

2 个答案:

答案 0 :(得分:0)

尝试使用第二个for循环替换以下for循环:

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

然后打印数组temp

答案 1 :(得分: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();
}