我不清楚如何解决。
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"
答案 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();
}