给你一个数组nums,数组中有2n个元素,按{x1,x2,...,xn,y1,y2,...,yn}的格式排列。请你将数组按照{x1,y1,x2,y2,...,xn,yn}格式重新排列,返回重排后的数组

 题目如上

遇到此题,首先应该想到要借助新定义的数组,本题中原数组为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; 
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值