2012华为校园招聘机试(成都)-2

 第二道:对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数  若奇数和偶数不等长,则把剩下的直接放到数组中。

 

-------------------思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。

             

 
 

#include<stdio.h>
#include<malloc.h>

void jiou(int a[],int n)
{
	int *p1;
	int *p2;
	int i,j;
	int k=0;
	int kk=0;
	int count1=0;
	int count2=0;
	int temp;
	int temp2;
	int m=0;
	p1=(int*)malloc(sizeof(int)*n);
	p2=(int*)malloc(sizeof(int)*n);
	for(i=0;i<n;i++)
	{
		p1[i]=0;
		p2[i]=0;
	}
	
	for(i=0;i<n;i++)
	{
		
		if((a[i]%2)!=0)
		{p2[kk++]=a[i];}
		else
		{p1[k++]=a[i];}
	}
	count1=k;
	count2=kk;
	
	for(i=0;i<count2;i++)
		printf("%3d",p2[i]);
	printf("\n");
	
	for(i=0;i<count2;i++)
		for(j=0;j<count2-1-i;j++)
			if(p2[j]>p2[j+1])
			{temp2=p2[j];p2[j]=p2[j+1];p2[j+1]=temp2;}
			for(i=0;i<count2;i++)
				printf("%3d",p2[i]);
			printf("\n");
			
			for(i=0;i<count1;i++)
				printf("%3d",p1[i]);
			printf("\n");
			
			
			for(i=0;i<count1;i++)
				for(j=0;j<count1-i;j++)
					if(p1[j]<p1[j+1])
					{temp=p1[j];p1[j]=p1[j+1];p1[j+1]=temp;}
					for(i=0;i<count1;i++)
						printf("%3d",p1[i]);
					printf("\n");
					
					
					
					if(count1>count2)
						
					{
						for(i=0;i<count2;i++)
						{
							a[i+m]=p2[i];
							a[i+1+m]=p1[i];
							m=m+1;
						}
						for(i=0;i<count1-count2;i++)
							a[2*count2+i]=p1[i+count2];
						
					}
					else
					{
						for(i=0;i<count1;i++)
						{
							a[i+m]=p2[i];
							a[i+1+m]=p1[i];
							m=m+1;
							
						}
						for(i=0;i<count2-count1;i++)
							a[2*count1+i]=p2[i+count1];
						
					}
					for(i=0;i<n;i++)
						printf("%3d",a[i]);
					printf("%\n");				
					
}
void main()
{
	int a[10]={2,3,14,6,2,15,12,14,4,11};
	jiou(a,10);
	
}

运行结果:
   3 15 11
  3 11 15
  2 14  6  2 12 14  4
 14 14 12  6  4  2  2
  3 14 11 14 15 12  6  4  2  2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值