题目3:特殊排序

http://ac.jobdu.com/problem.php?cid=1040&pid=2

题目描述:

输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。

输入:
输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。
接下来的一行有N个整数。
输出:
可能有多组测试数据,对于每组数据,
第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。
第二行将排序的结果输出。
样例输入:
4
1 3 4 2
样例输出:
4
1 2 3
提示:

如果数组中只有一个数,当第一行将其输出后,第二行请输出"-1"。

// 题目3:特殊排序.cpp: 主项目文件。

//#include "stdafx.h"
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

const int N=1003;
int a[N];

int main()
{
    int n;
	while(scanf("%d",&n)!=EOF)
	{
		for(int i=0;i<n;i++)
			scanf("%d",a+i);
		sort(a,a+n);
		if(n==1)
		{
			printf("%d\n-1\n",a[0]);
			continue;
		}
		bool flag=true;
		printf("%d\n",a[n-1]);
		for(int i=0;i<n-1;i++)
		{
			if(flag)
			{
				flag=false;
				printf("%d",a[i]);
			}
			else
				printf(" %d",a[i]);
		}
		printf("\n");
	}
    return 0;
}


<think>我们有一个需求:用Python基础语法编写程序去除重复数字并对数字列表进行升序排序。思路:1.去除重复数字:我们可以使用集合(set)来去除重复,因为集合不允许重复元素。但是集合是无序的,所以我们需要再转换为列表并排序。2.排序:使用列表的sort()方法或者sorted()函数进行排序。然而,我们也可以不使用集合,而是先排序,然后遍历列表,将不重复的元素添加到一个新列表中(因为排序后相同的数字会相邻,所以我们可以通过比较相邻元素来去重)。根据用户是初学者,我们提供两种方法:方法一:使用集合去重,然后排序(简单)方法二:先排序,然后遍历去重(不使用集合,初学者可以练习循环)但是注意:题目要求是“数字列表”,所以假设输入是一个列表,里面可能有重复的数字。我们参考引用[1]中提到了遍历列表的几种方式,引用[2]提到了数字类型,引用[3]提到了去重的概念(虽然是在数据库上下文中,但概念类似)。下面我们分别用两种方法实现:方法一(使用集合):步骤:1.将列表转换为集合(自动去重)2.将集合转换回列表3.对列表进行排序方法二(不使用集合):步骤:1.先对列表进行排序2.创建一个新的空列表3.遍历排序后的列表,如果当前元素不等于新列表的最后一个元素(或者新列表为空),则添加到新列表中注意:方法二需要处理空列表的情况,并且因为我们是按顺序遍历,所以可以保证新列表中的元素是不重复且有序的。考虑到初学者,我们写两种代码示例,并解释。另外,用户要求的是“升序排序”。代码示例:</think>### Python数字列表去重与排序实现 根据您的需求,我将提供使用基础Python语法实现数字列表去重和排序的解决方案。以下是两种常见方法: #### 方法一:使用集合(set)去重 + sorted()排序(推荐) ```python # 原始数字列表 numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3] # 去重并排序 unique_sorted = sorted(set(numbers)) print("去重排序后的列表:", unique_sorted) # 输出: [1, 2, 3, 4, 5, 6, 9] ``` **原理说明:** 1. `set(numbers)`:将列表转为集合,自动去除重复元素(集合特性) 2. `sorted()`:对去重后的元素进行升序排序 3. 时间复杂度:$O(n \log n)$(主要来自排序操作) #### 方法二:遍历去重 + 列表排序(适合初学者理解) ```python numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3] unique_numbers = [] # 遍历去重 for num in numbers: if num not in unique_numbers: # 检查是否已存在 unique_numbers.append(num) # 排序(使用列表的sort方法) unique_numbers.sort() print("去重排序后的列表:", unique_numbers) # 输出: [1, 2, 3, 4, 5, 6, 9] ``` **关键语法解析:** 1. `for...in`循环:遍历列表元素(引用[1]) 2. `not in`运算符:检查元素是否存在 3. `append()`方法:添加新元素到列表 4. `sort()`方法:原地排序列表(默认升序) #### 浮点数处理示例 ```python float_nums = [3.14, 2.71, 1.618, 2.71, 3.14] result = sorted(set(float_nums)) print("浮点数处理结果:", result) # 输出: [1.618, 2.71, 3.14] ``` > **注意**:Python中数字类型包括`int`, `float`, `complex`(引用[2]),上述方法同样适用于浮点数。集合的去重操作基于值相等性,对于浮点数可能因精度问题需要特殊处理(如使用`math.isclose`),但基础场景可直接使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值