首页 > 试题广场 >

KiKi去重整数并排序

[编程题]KiKi去重整数并排序
  • 热度指数:17512 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。

输入描述:
第一行,输入一个整数n,表示序列有n个整数。
第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。


输出描述:
去重并且从小到大排列的整数序列,整数之间用空格分隔。
示例1

输入

6
5 3 3 4 2 2

输出

2 3 4 5
#include<stdio.h>
int main()
{
            int n,i,j,t;
            int a[100]={0};
            int* p =a;

            scanf("%d",&n);

            for(i=0;i<n;i++)
            scanf("%d",&a[i]);

            for(i=0;i<n;i++)
                        for(j=1;j<n+1;j++)
                        if(a[i]==a[i+j])
                        *(p+i+j)=0;

            for(j=0;j<n;j++)        
            {for(i=0;i<n;i++)
                        if(a[i]>a[i+1])
                        {    t=a[i];
                            a[i]=a[i+1];
                            a[i+1]=t;}}
            for(i=0;i<=n;i++)
                        if(a[i]!=0)
            printf("%d ",a[i]);
    return 0;
}

发表于 2020-08-11 11:41:37 回复(1)
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int i;
    cin>>i;
    int* a=new int[i];
    for(int j=0;j<i;j++)
        cin>>a[j];
        sort(a,a+i);
    int n=unique(a,a+i)-a;
    for(int k=0;k<n;k++)
        cout<<a[k]<<" ";
    delete []a;
return 0;
}

发表于 2020-07-10 12:52:27 回复(0)

利用Set集合不允许重复元素的特点,来去掉重复元素

import java.util.*;
public class Main {
     public static void main(String[] args){
        Scanner s =new Scanner(System.in);
        int a= s.nextInt();
        HashSet set = new HashSet();
        for(int i=1;i<=a;i++){
            set.add(s.nextInt());
        }
        List list = new ArrayList(set);
        //升序排序
        Collections.sort(list);
        for (Integer integer : list) {
            System.out.print(integer+" ");
        }
     }
编辑于 2021-04-12 15:08:34 回复(0)
n=input()
a=[int(i) for i in input().split()]

new = sorted(set(a)) for i in range(len(new)): print(new[i], end=' ')
发表于 2020-07-16 18:51:35 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String args[]){
        int n,b,t=0;
        int a[]=new int[1001];
        Scanner s=new Scanner(System.in);
        n=s.nextInt();
        while((--n)>=0)
        {
           b=s.nextInt();
           a[b]=1;
        }
        s.close();
        while(t<1001)
        {
            if(a[t]==1)
            System.out.print(t+" ");
            t++;
        }    
    }
}

发表于 2020-07-10 18:33:44 回复(0)
#include <stdio.h>
int main()
{
    int n,i,m = 0;
    int a[10000] = {0};
    scanf("%d",&n);
    for(i = 0;i < n;i++)
    {
       scanf("%d",&m);
          a[m] = m;
    }
     for(i = 0;i < 10000;i++)
    {
      if(a[i] != 0)
      {
          printf("%d ",a[i]);
      }
    }
    return 0;
}

发表于 2021-09-13 16:34:30 回复(4)
int main()
{
	int n = 0;
	scanf("%d",&n);
	int arr[50] = { 0 };
	int i = 0;
	for (i=0;i<n;i++)
	{
		scanf("%d",&arr[i]);
	}
	int tmp = 0;
	int k = 0;
	int g = 0;
	int sum = 0;
	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j=i+1;j<n-sum;j++)
		{
			if (arr[i]==arr[j])
			{
				int g = j;
				for (k=j;k<n-1;k++)
				{
					tmp = arr[g];
					arr[g] = arr[g + 1];
					arr[g + 1] = tmp;
					g++;
				}
				sum++;
			}
		}
	}
    	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j=i+1;j<n-sum;j++)
		{
			if (arr[i]==arr[j])
			{
				int g = j;
				for (k=j;k<n-1;k++)
				{
					tmp = arr[g];
					arr[g] = arr[g + 1];
					arr[g + 1] = tmp;
					g++;
				}
				sum++;
			}
		}
	}
	for (i = 0; i < n-sum; i++)
	{
		int j = 0;
		int tmp = 0;
		for (j=0;j<n-sum-1;j++)
		{
			if (arr[j] > arr[j + 1])
			{
				tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
	for (i = 0; i < n-sum; i++)
	{
		printf("%d ",arr[i]);
	}

	return 0;
}

发表于 2024-09-11 17:33:24 回复(0)
#include<stdio.h>
int main() {
    int n = 0;
    int arr[1001] = {0};
    scanf("%d", &n);
    int i = 0 ;
    int m = 0;
    for (i = 0; i < n; i++) {
        scanf("%d", &m);
        arr[m] = m;
    }
    for (i = 0; i < 1001; i++) {
        if (arr[i] != 0)
            printf("%d ", arr[i]);
    }
    return 0;
}

发表于 2024-02-04 17:38:43 回复(0)
#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
    int n = 0;
    int arr[100] = {0};
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (int i = 0; i < n; i++)
    {
        int a = i;
        for (int y = 1; y < n-i; y++)
        {
            if (arr[a] == arr[a + y])
            {
                arr[a + y] = 0;
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        int j = 1;
        for (j = 0; j < n - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    for (int i = 0; i <= n; i++)
    {
        if (arr[i] != 0)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}
编辑于 2024-01-02 10:30:09 回复(1)
#include <stdio.h>

int main() {

  int a[100],n,temp,flag=0;
  scanf("%d",&n);
  for(int i=0;i<n;i++)
  scanf("%d",&a[i]);
  for(int i=0;i<n;i++)
  {
    for(int j=i+1;j<n;j++)
       {
        if(a[i]>a[j])
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
       }
  }
 /* for(int i=0;i<n;i++)
  {
    if(a[i]==a[i+1])
    {
       for(int j=i;j<n-i;j++)
       a[j]=a[j+1];
    }
    n--;
  }*/  // 忽略了可能存在两个及以上的重复数据
  int tem[100],k=0;
  for(int i=0;i<n;i++)
  {
       
   while(a[i]==a[i+1])i++; // 不断循环直到找到两个不相等的元素
    tem[k++]=a[i];
   
  }
  for(int i=0;i<k;i++)
  printf("%d ",tem[i]);
}

/*先排序使得重复的数据都相邻在一起,再通过一个循环找到重复元素最后出现的位置并且把他存储到另外一个数组中,从而过滤掉重复元素*/
发表于 2024-11-14 21:39:59 回复(0)
#include <stdio.h>
#include<stdlib.h>
int cmp_int(const void* p1,const void* p2)
{
    return *(int*)p1-*(int*)p2;
}
int main() {

    int n,i,j,k;
    scanf("%d",&n);
    int* arr=(int*)malloc(n*sizeof(int));
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }

    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(arr[i]==arr[j])
            {
                for(k=j;k<n-1;k++)
                {
                    arr[k]=arr[k+1];
                }
                n--;
                j--;
            }
        }
    }

    qsort(arr,n,sizeof(arr[0]),cmp_int);

    for(i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }

    free(arr);
    arr=NULL;
    return 0;
}
发表于 2024-05-18 14:05:32 回复(0)
#include <stdio.h>
#include <malloc.h>
#include <assert.h>

void QuickSort(int* left, int* right)
{
    assert(left && right);

    //只剩1个元素,无需继续排序
    //开始回归
    if (left >= right)
    {
        return;
    }

    int* i = left;
    int* j = right;
    int pivot = *left;

    while (i < j)
    {
        //j在小于pivot的地方停下来
        while (*j >= pivot && j > i)
        {
            j--;
        }
        *i = *j;

        //i在大于pivot的地方停下来
        while (*i <= pivot && i < j)
        {
            i++;
        }
        *j = *i;
    }
    //将基准元素pivot放入它该在的位置
    *j = pivot;

    QuickSort(left, i - 1);//i是上一轮已经处理好的元素,所以 -1 处理左边的元素
    QuickSort(j + 1, right);//j是上一轮已经处理好的元素,所以 +1 处理右边的元素
}

int main()
{
    int n = 0;
    int i = 0;
    int* p = NULL;

    scanf("%d", &n);

    //开辟空间
    p = (int*)malloc(sizeof(int) * n);
    if (!p)
    {
        perror("malloc:p");
        return 1;
    }

    //录入数列
    for (i = 0; i < n; i++)
    {
        scanf("%d", p + i);
    }

    //进行排序
    QuickSort(p, p + n - 1);

    //进行去重输出
    printf("%d ", *p);
    for (i = 1; i < n; i++)
    {
        if (*(p + i) == *(p + i - 1))
        {
            continue;
        }
        printf("%d ", *(p + i));
    }

    //释放空间
    free(p);
    p = NULL;

    return 0;
}

发表于 2024-03-20 13:46:52 回复(0)
#include<stdio.h>

int main() 
{
    int n = 0;
    scanf("%d", &n);
    int arr[1001] = { 0 };
    int m = 0;
    for (int i = 0; i < n; i++) 
    {
        scanf("%d", &m);
        arr[m] = m;
    }
    for (int i = 0; i <= 1000; i++) 
    {
        if (arr[i] != 0) 
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}

编辑于 2023-12-17 16:47:27 回复(0)
int main() {
    int n = 0;
    scanf("%d", &n);
    int arr[1001] = {0};
    int i = 0, tmp = 0;
    for(i = 0; i < n; i++){
        scanf("%d", &tmp);
        arr[tmp] = tmp;
    }
    for(i = 1; i < 1001; i++){
        if(arr[i] != 0){
            printf("%d ", arr[i]);
        }
    }
    return 0;
}

发表于 2023-11-10 13:11:09 回复(0)
#include<stdio.h>
int main()
{
    int arr[200] = { 0 };
    int n = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d",& arr[i]);
    }
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                int tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (arr[i] == arr[j]) {
                goto loop;
            }
        }
        printf("%d ", arr[i]);
    loop:;
    }
    return 0;
}
发表于 2023-11-01 08:28:26 回复(0)
#include<stdio.h>
int main()
{
    int arr[1001]={0};
    int n=0;
    int m=0;
    int i=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&m);
        arr[m]=m;
    }
    for(i=0;i<1001;i++)
    {
        if(arr[i]!=0)
        {
            printf("%d ",arr[i]);
        }
    }
    return 0;
}
发表于 2023-03-13 02:49:28 回复(1)
#include<stdio.h>
#define MAXN 10001
int main()
{
    int n=0;
    scanf("%d",&n);
    int arr[MAXN]={0};
    int tmp=0;
    for(int i=0;i<MAXN;i++)
    {
        scanf("%d",&tmp);
        arr[tmp]=tmp;
    }
    for(int i=0;i<MAXN;i++)
    {
        if(arr[i]!=0)
        {
            printf("%d ",arr[i]);
        }
    }
    return 0;
}

发表于 2023-02-12 14:11:26 回复(0)
#include <stdio.h>

int main(){
    int a[1001] ={0};
    int n =0;
    int k = 0;
    scanf("%d",&n);
    for(int i = 0;i<n;i++){
        scanf("%d",&k);
        a[k]++;
    }
    for(int i = 0;i<1001;i++){
        if(a[i] > 0){
            printf("%d ",i);
        }
    }
    return 0;
}

发表于 2023-02-11 11:43:41 回复(0)
#include <stdio.h>
#include <stdlib.h>

int main() {
    int a, b, tmp;
    int n, size = 0;
    int* arr = NULL;
    //申请n个字节动态空间
    while (arr == NULL)
    {
        scanf("%d", &n);
        arr = (int*)malloc(n * sizeof(int));
    }
    //输入数据,重复的不进行储存
    for (a = 0; a < n; a++)
    {
        scanf("%d", arr + size);
        size++;
        for (int i = 0; i < size-1; i++)
        {
            if (*(arr + size-1) == *(arr + i))
            {
                size--;
                break;
            }
        }
    }
    //进行排序
    for (a = 0; a < size-1; a++)
    {
        for (b = 0; b < size - a - 1; b++)
        {
            if (*(arr + b) > *(arr + b + 1))
            {
                tmp = *(arr + b);
                *(arr + b) = *(arr + b + 1);
                *(arr + b + 1) = tmp;
            }
        }
    }
    for (a = 0; a < size; a++)
    {
        printf("%d ", *(arr + a));
    }
    return 0;
}

发表于 2022-12-30 21:15:59 回复(0)
#include <stdio.h>
int main()
{
    int n=0;
    scanf("%d",&n);
    int arr[1001]={0};
    int i=0;
    for(i=0;i<n;i++)
    {
        int temp=0;
        scanf("%d",&temp);
        arr[temp]=temp;
    }
    for(i=0;i<1001;i++)
    {
        if(arr[i]!=0)
            printf("%d ",arr[i]);
    }
    return 0;
}
发表于 2022-12-17 17:35:04 回复(0)