题目如上
遇到此题,首先应该想到要借助新定义的数组,本题中原数组为nums,我又重新定义了数组a和数组b。由于题目要求的数组与原数组有一定的关系,观察这个关系。我们可以把原数组分成两半,分别放在新定义的两个数组中,再根据新数组中对应的元素在新定义的数组中找到相应的元素,进行赋值,即可将代码重新排列,代码如下:
#include<stdio.h>
int main ()
{
int nums[100],a[100],b[100],n,i,j,k;
scanf("%d",&n);
for(i=0;i<2*n;i++)//输入数组元素 (注意是a*2)
scanf("%d",&nums[i]);
for(i=0;i<n;i++)//将nums数组中的前一半元素放入a数组中
a[i]=nums[i];
for(i=0;i<n;i++)//将nums数组中的后一半元素放入b数组中
b[i]=nums[i+n];
for(i=0,j=0,k=0;i<2*n&&j<n&&k<n;i++)
{
if(i==0)//注意是==
{
nums[i]=a[j];//排列好的数组中第一个元素就是数组a中的第一个元素
j++;
}
else if(i==1)
{
nums[i]=b[k];//排列好的数组中的第二个元素就是数组b中的第一个元素
k++;
}
else if(i%2==0)//如果是奇数位的元素 (eg:nums[2],nums[4],nums[6]...)
{
nums[i]=a[j];//将数组a中的对应元素赋值给 nums数组对应元素
j++;
}
else//如果是偶数位的元素(eg:nums[3],nums[5],nums[7]...)
{
nums[i]=b[k];//将数组b中的对应元素赋值给nums数组对应的元素
k++;
}
}//循环结束,已经将新的数组排列好
for(i=0;i<2*n;i++)
printf("%d ",nums[i]);
return 0;
}