SZU实验十函数综合【id:533】【20分】C. 分类排序(函数)

题目描述

从键盘输入10个整数(10个整数均不相同), 然后再从键盘中输入一个整数a,如果该整数a为奇数, 且与这10个整数中的任一个数相同,则删掉与a相同的 这个数,并将剩下的9个数按升序排序输出;若a为偶数, 且与这10个数都不同,则加入a,并将这11个数降序排 序输出;否则,则将这10个数奇数在前,偶数在后, 降序排列输出。例如,10个数分别为6,89,34,12, 0,-8,78,15,9,3.若a为9,则输出为:-8,0,3, 6,12,15,34,78,89.若a为2,则输出为:89,78, 34,15,12,9,6,3,2,0,-8.若a为7或者12,则 输出为:89,15,9,3,78,34,12,6,0,-8.

要求:使用函数解决本题,至少编写以下几个函数,1、升序排序函数void sort(int a[], int n);2、查找函数int find(int a[],int n,int value)----在大小为n的a数组中查找值为value的元素,找到就返回元素的下标,找不到,就返回-1;3、输出函数display(int a[], int n)---逐个输出数组a的元素;4、反转数组函数void reverse(int a[], int n)----将数组逆序。

输入

测试数据的组数n

第一组测试数据的10个整数

第一组的整数a

第二组测试数据的10个整数

第二组的整数a

......

第n组测试数据的10个整数

第n组的整数a

输出

第一组数据排序输出

第二组数据排序输出

.......

第n组数据排序输出

IO模式

本题IO模式为标准输入/输出(Standard IO),你需要从标准输入流中读入数据,并将答案输出至标准输出流中。

输入样例2中有负数,由于是后台数据就不放出了,注意一下存在负数即可(哈哈是谁栽在这里啦原来是我啊XD

代码如下:

#include <stdio.h>
int a[11];
void sort(int a[],int n);
int find(int a[],int n,int value);
void display(int a[],int n);
void reverse(int a[],int n);
void other(int a[],int n); 
int main(){
	int t,m,v;
	scanf("%d",&t);
	while(t--){
		for(int i=0;i<10;i++)
			scanf("%d",&a[i]);
		scanf("%d",&m);
		v=find(a,10,m);
		if(m%2==1){
			if(v!=-1){
				for(int i=v;i<10;i++)
					a[i]=a[i+1];
				sort(a,9);
				display(a,9);
				continue;
			}
		}
		else{
			if(v==-1){
				a[10]=m;
				sort(a,11);
				reverse(a,11);
				display(a,11);
				continue;
			}
		}
		sort(a,10);
		reverse(a,10);
		other(a,10);
		display(a,10);
	}
	return 0;
}
void sort(int a[],int n){
	int k,z;
	for(int i=0;i<n-1;i++)
	{
		k=i;
       	for(int j=i+1;j<n; j++)
           	if (a[j]<a[k])  
				k=j;
      	if (i!=k)
      	{  
			z=a[i];
			a[i]=a[k];
			a[k]=z; 
		}
	}
}
int find(int a[],int n,int value){
	for(int i=0;i<n;i++)
		if(a[i]==value)
			return i;
	return -1;
}
void display(int a[],int n){
	for(int i=0;i<n;i++){
		printf("%d",a[i]);
		if(i<n-1)
			printf(" ");
		else
			printf("\n");
	}
}
void reverse(int a[],int n){
	int temp[n];
	for(int i=0;i<n;i++)
		temp[i]=a[n-i-1];
	for(int i=0;i<n;i++)
		a[i]=temp[i];
}
void other(int a[],int n){
	int temp[n];
	int l;
	l=0;
	for(int i=0;i<n;i++)
		if(a[i]%2==1 || a[i]%2==-1){
			temp[l]=a[i];
			l++;
		}
	for(int i=0;i<n;i++)
		if(a[i]%2==0){
			temp[l]=a[i];
			l++;
		}
	for(int i=0;i<n;i++)
		a[i]=temp[i];
}





other函数通过先记录奇数后记录偶数的方式,把奇数前移偶数后移

站内还有一版是通过交换奇数偶数位置来实现此功能的,链接也放在这里:

【id:232】【20分】B. 分类排序(函数)_从键盘输入10个整数(10个整数均不相同), 然后再从键盘中输入一个整数a,如果该整数-优快云博客

(之前没考虑到存在负数的情况,寻思着找个代码参考一下思路的时候找到的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值