第一行包含一个正整数n,表示老师给出的序列有n个数,接下来有n行,每行一个正整数k,为序列中每一个元素的值。(1 ≤ n ≤ 105,1 ≤ k ≤ n) 输出一行,为去重排序后的序列

计数排序法(桶排序)
输入描述:
第一行包含一个正整数n,表示老师给出的序列有n个数。接下来有n行,每行一个正整数k,为序列中每一个元素的值。(1 ≤ n ≤ 105,1 ≤ k ≤ n)输出描述:
输出一行,为去重排序后的序列,每个数后面有一个空格。
示例1
输入
4
2
2
1
1
输出
1 2
因为输出去重后排列的数字序列,我们可以用桶排序,先定义一个合适的数组s[],将其全部初始化为0,从键盘上接受一个数字i,将s[i]值改为1,输入完后,用for循环从0开始,到n,s[n]=1时输出n,这样就直接排序并且去重了

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int m,n,i,k,j,s[100000] = {0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&j);
        s[j]=1;
    }
    for(j=1;j<=n;j++)
    {
        if(s[j] == 1){
            printf("%d ",j);
        }
    }
return 0;

}

在这里插入图片描述

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题要求使用Excel对一组纪录按任意指定列排序。现在请编写程序实现类似功能。 输入格式: 输入的第一行包括一个正整数n(1 <= n <= 100),表示接下来将输入n纪录。紧接着有一个正整数c(1 <= c <= 1000),表示排序的列号。然后是n的待排序的纪录,每条纪录包含一个字符串和一个整数,间用一个空格隔开。 输出格式: 按照指定列,输出排序后的结果。输出格式同输入格式。 输入样例: 3 1 abc 2 bcd 1 bed 3 输出样例: bcd 1 abc 2 bed 3 解释:按照第1列排序后,结果为bcd 1、abc 2、bed 3。 ### 回答2: 括m个字段,均为不超过1000的正整数,相邻两数字间用一个空格分隔。\n\n输出格式:\n输出n表示按照第c列排序后的结果。若若干条纪录第c列相同,则它们之间的顺序任意。\n\n输入样例:\n3 2\n1 3\n2 2\n3 1\n输出样例:\n3 1\n2 2\n1 3\n''' 题目分析: 本题需要将输入数据按照第c列进排序,一般的解决方是使用sort排序函数,但是在本题输入的数据含有多个数字,因此需要从输入解析出每一行的第c列数字并进排序,且排序后需要输出完整的一行。 算过程: 使用列表存储输入数据,遍历列表的每一行解析出第c列数字,存储为元组,将元组列表使用sort排序函数进排序,最后遍历排好序的元组列表,输出对应的一行即可。 算实现: n, c = map(int, input().split()) # 读入数据 lst = [] for i in range(n): line = input().split() # 将第c列摘出来存储为元组 tpl = (int(line[c-1]), line) lst.append(tpl) # 列表排序 lst.sort() # 输出结果 for tpl in lst: print(' '.join(tpl[1])) 参考链接:牛客网 本文同步发表于个人博客:https://blog.csdn.net/qq_44736843/article/details/118685295 ### 回答3: 本题要求实现类似Excel的功能,即可以对一组纪录按照任意指定列进排序。我们可以首先通过输入获取纪录的条数n和指定排序的列号c,然后读取n数据,将其存储在一个二维数组接下来,我们需要对二维数组按照指定列进排序。一种简单的实现方式是使用冒泡排序。具体来说,我们可以对每一行数据进比较,如果第c列上的比下一行数据上第c列的要大,则交换这两数据的位置,直到所有的都被排好序为止。 排序完成后,我们可以按照排好序的次序,将每一行数据依次输出即可。具体实现方式可以使用循环遍历二维数组,输出每行数据。 综上所述,我们可以使用类似以下的方式实现本题: ``` #include <cstdio> #include <algorithm> using namespace std; const int MAX_N = 1e5 + 10; int n, c; int a[MAX_N][10]; void sort_2d_array() { // 对二维数组进排序 for (int i = 0; i < n; i++) { for (int j = 0; j < n - i - 1; j++) { if (a[j][c] > a[j + 1][c]) { for (int k = 0; k < 10; k++) { swap(a[j][k], a[j + 1][k]); } } } } } int main() { scanf("%d%d", &n, &c); for (int i = 0; i < n; i++) { for (int j = 0; j < 10; j++) { scanf("%d", &a[i][j]); } } sort_2d_array(); for (int i = 0; i < n; i++) { for (int j = 0; j < 10; j++) { printf("%d ", a[i][j]); } printf("\n"); } return 0; } ``` 以上代码,我们定义了一个二维数组a,用于存储输入的n数据。sort_2d_array函数实现了对这个二维数组按照指定列进排序的功能。在主函数,我们首先读入输入数据,然后调用sort_2d_array函数对二维数组进排序,最后输出排好序的二维数组。 需要注意的是,上述代码只是承接了输入数据,并对输入数据进了简单的排序。在实际使用,我们还需要考虑一些更复杂的情况,例如输入数据可能超过数组大小,或者输入数据每行数据可能存在部分空缺等问题,需要根据具体情况进优化和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值