首页 > 试题广场 >

序列中整数去重

[编程题]序列中整数去重
  • 热度指数:28484 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述:

输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。



输出描述:

输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

示例1

输入

5
10 12 93 12 75

输出

10 12 93 75
int main() {
	int num = 0;
	int nums[100];
	int i = 0; int j = 0; int n = 0;
	scanf("%d", &num);
	int pd = 0;
	for (i = 0; i < num; i++)
	{
		scanf("%d", &nums[i]);
	}
	for (i = 0; i < num; i++)
	{
		pd = 0;
		for (n = 0; n < i; n++)
		{
			if (nums[n] == nums[i])
			{
				pd = 1;
				break;
			}
		}
		if (pd == 0)
		{
			printf("%d ", nums[i]);
		}
	}
	return 0;
}
直接与自身对比,如果有相同标记为1,最后只输出标记为0的数字
发表于 2025-08-29 16:49:07 回复(0)
#include <stdio.h>

int main() {
    int a, b[1000]={},c;
    scanf("%d\n",&a);
    for(c=0;c<a;c++){
        scanf("%d ",&b[c]);
    }
    int x,y,t;
    for(x=0;x<a;x++){
        for(y=x+1;y<a;y++){
            if(b[x]==b[y]){
                b[y]=0;
                t++;
            }
        }
    }
    int i=0;
    for(i=0;i<a;i++){
        if(b[i]==0){
            continue;
        }
       
        printf("%d ",b[i]);
    }
    return 0;
}
发表于 2025-08-08 23:08:20 回复(0)
#include <stdio.h>

int main() {
    int n = 0;
    int arr[1000] = { 0 };
    int count = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    int num = 0;
    int flag = 0;
    while (num < n) {//从arr[0]开始
        count = 0;
        for (int i = num; i < n; i++) {
            flag = 0;
            if (arr[num] == arr[i]) {
                count++;
                flag = 1;
            }
            if (count >= 2 && flag) {//不是第一次出现进行删除
                //删除重复元素
                for (int j = i; j < n - 1; j++) {
                    arr[j] = arr[j + 1];
                }
                n = n - 1;
                i--;
            }
        }

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

也许我不适合学计算机哎,研究2个小时
发表于 2025-07-16 23:50:45 回复(0)
#include <stdio.h>
int exist(int arr[],int n,int target);
int main() {
    int n=0;
    scanf("%d",&n);
    int arr[n];
    for(int i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
    int newArr[n];
    newArr[0]=arr[0];
    int j=1;
    for(int i=1;i<n;i++){
        if(!exist(newArr,j,arr[i])){
            newArr[j++]=arr[i];
        }
    }
    for(int i=0;i<j;i++){
        printf("%d ",newArr[i]);
    }
    return 0;
}
int exist(int arr[],int n,int target){
    int is=0;
    for(int i=0;i<n;i++){
        if(arr[i]==target){
            is=1;
            break;
        }
    }
    return is;
}
发表于 2025-07-12 22:13:50 回复(0)
#include <stdio.h>
#include <stdlib.h>
int main() {
    int n;
    scanf("%d",&n);
    int *sz=(int *)malloc(n*sizeof(int));
    for(int i=0;i<n;i++)
    scanf("%d",&sz[i]);
    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;)
        {          
            if(sz[i]==sz[j])
            {
                for(int k=j;k<n-1;k++)
                {
                    sz[k]=sz[k+1];
                }
                n--;
            }
            else
            {
                j++;
            }
        }
    }
    for(int i=0;i<n;i++)
    printf("%d ",sz[i]);
    free(sz);
    return 0;
}
发表于 2025-07-11 18:13:38 回复(0)
#include <stdio.h>

int main() {
	int n = 0;
	int arr[1000] = { 0 };
	scanf("%d", &n);

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

	int j = 0;
	while(j < n && arr[j] != 0)
	{
	ret:



		for (int k = j+1;k < n;k++)
		{
			if (arr[j] == arr[k])
			{
				int l = k;
				for (l = k;l < n;l++)
				{
					arr[l] = arr[l + 1];
				}
				arr[l] = 0;
				goto ret;
			}
		}
		j++;
	}

	int a = 0;
	while (arr[a] != 0)
	{
		printf("%d ", arr[a]);
		a++;
	}


	return 0;
}

发表于 2025-06-19 21:44:37 回复(0)
#include <stdio.h>

int main()
{
    int a;
    scanf("%d",&a);
    int arr1[a];
    for(int i=0;i<a;i++)
    {
        scanf("%d",&arr1[i]);
    }
    int count=0;
    for(int i=0;i<a;i++)
    {
        for(int j=i+1;j<a;j++)
        {
            if(arr1[i]!=0&&arr1[i]==arr1[j])
            {
                arr1[j]=0;
                count++;
            }
        }
    }
    int arr2[a-count];
    int k=0;
    for(int i=0;i<a;i++)
    {
        if(arr1[i]!=0)
        {
            arr2[k]=arr1[i];
            k++;
        }
    }
    for(int i=0;i<a-count;i++)
    {
        printf("%d ",arr2[i]);
    }
    return 0;
}
发表于 2025-05-18 01:32:56 回复(0)
#include <stdio.h>
int main() {
    int a;
    scanf("%d\n", &a);
    int arr[a];
    for(int i = 0; i < a; i++)
    {
        scanf("%d", arr + i);
        for (int j = 0; j < i; j++)
        {
            if(arr[i] == arr[j])
            arr[i] = 0;
        }
        if(arr[i])
        printf("%d ", arr[i]);
    }
    return 0;
}
发表于 2025-04-28 12:42:39 回复(0)
#include <stdio.h>
int main() {//去重末完成
    int a[50] = { 0 }, b = 0;
    while (scanf("%d", &b) != EOF) {//输入第一行
        for (int i = 0; i < b; i++) {//输入处二行
            int t = scanf("%d", &a[i]);
        }
        int t = 0;//重复的数量
        for (int i = 0; i < b - 1 - t; i++) {//便利第一个元素
            for (int j = i; j < b - 1 - t; j++) {//便利第二个元素
                if (a[i] == a[j + 1]) {
                    t++;
                    for (int k = j+1; k <= b - 1; k++) {//移动一个数
                        a[k] = a[k+1];
                    }
                    j--;
                }
            }
        }
        for (int i = 0; i < b - t; i++) {//打印
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}
发表于 2025-02-23 12:28:14 回复(0)
#include<stdio.h>
void My_scanf(int arr[],int n)
{
   int i = 0;
   for(i=0;i<=n;i++)
   {
    scanf("%d ",&arr[i]);
   }
}
int remove_same(int arr[],int arr1[],int n)
{
    int i = 0;
    int j = 0;
    int sum = 0;
    for(i=0;i<n;i++)
    {
        int judge = 1;
        for(j=0;j<=sum;j++)
        {
            if(arr[i]==arr1[j])
            {
                judge =0;
                break;
            }
        }
        if(judge == 1)
        {
            arr1[sum]=arr[i];
            sum++;
        }
    }
    return sum;
}
void My_printf(int arr1[],int n)
{
   int i = 0;
   for(i=0;i<n;i++)
   {
    printf("%d ",arr1[i]);
   }
}
int main()
{
    int n = 0;
    int k = 0;
    scanf("%d\n",&n);
    int arr[n];
    int arr1[n];
    My_scanf(arr,n);
    int ret = remove_same(arr,arr1,n);
    My_printf(arr1,ret);
    return 0;
}

发表于 2024-12-31 08:47:36 回复(0)
#include <stdio.h>

int main() {
    int a, b;
    scanf("%d", &a);
    int c[a],i=0,j=0,k=0,m=0,n=0;
    for(b=0;b<a;b++){
        scanf("%d", &c[b]);
    }
    for(b=0;b<a;b++){
        i=b+1,j=i,m=0;
        while(j<a){
            if(c[j]==c[b]){
                j++,m++;
            }
            else{
                c[i]=c[j];
                i++,j++;
            }
        }
        a=a-m;
       
       
        for(i=b+1;i<a;i++){
           
           
        }
    }
    for(i=0;i<a;i++){
           
            printf("%d ",c[i]);
        }
       
   
    return 0;
}
发表于 2024-11-06 10:33:07 回复(0)
#include <stdio.h>

int main()
{
    int n=0; int arr[5000]; int i=0; int j=0;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&arr[i]);
    }
    for(i=0; i<=n-1; i++)//一共有n个数和前面比较
    {
        int z=0;
        for(j=1; j<=i; j++)//第i+1个数要进行i次比较
        {
            if(arr[i]==arr[i-j])
            {
                z=1;//当和前面数相同时令z=1;同时跳出循环
                break;
            }
        }
        if(z==0)//z=0表示第i个数与它前面的数没有相同的
        {
            printf("%d ",arr[i]);
        }

    }
    return 0;
}
发表于 2024-09-22 14:09:37 回复(0)
#include <stdio.h>

int main()
{
    int n=0;
    scanf("%d",&n);
    int i=0;
    int arr[1000]={0};

    for(i=0;i<=n-1;++i)
    scanf("%d",arr+i);
int j=0;
    for(i=0;i<=n-1;++i)
    {
       for(j=0;j<i;++j)
     
      {
        if(arr[i]==arr[j])//有重复的就跳出内循环
       break;

       }
       
        if(j==i)  //循环走完了 说明没有重复的
       {
        printf("%d ",arr[i]);
       }

    }

    return 0;
}
发表于 2024-08-27 09:46:06 回复(0)
为什么j<n就跑不通呢?
#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int arr[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    int arr2[n];
    int k = 0;
    for (int i = 0; i < n; i++) {
        int flag=1;
        for (int j = 0; j < k; j++) {
            if (arr[i] == arr2[j]){
                flag = 0;
                break;
            }
        }
        if (flag) {
            arr2[k++]=arr[i];
        }
    }

    for(int i=0;i<k;i++){
            printf("%d ", arr2[i]);
    }
    return 0;
}


发表于 2024-08-16 11:32:05 回复(0)
#include <stdio.h>

void delete_chongfu(int array[], int len);

int main()
{
    int N = 0;
    scanf("%d", &N);
    int array[N];
    for(int i = 0; i < N; i++)
    {
        scanf("%d", &array[i]);
    }  
    delete_chongfu(array, N);
    return 0;
}

void delete_chongfu(int array[], int len)
{
    int flag = 0;
    for(int i = 0; i < len - 1; i++)
    {
        for(int j = i + 1; j < len; j++)
        {
            if(array[j] == array[i])
            {
                array[j] = -5;
            }
        }
    }

    for(int i = 0; i < len; i++)
    {
        if(array[i] != -5)
        {
            printf("%d ", array[i]);
        }
    }
}
发表于 2024-08-12 19:41:13 回复(0)
#include <stdio.h>

int main() {
    int n = 0, i = 0, j = 0, k = 0, p = 0;
    scanf("%d", &n);
    int arr[90] = { 0 };
    for(i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (j = 0; j < n; j++)
    {
        int m = 0;
        
        for (k = 0; k < n; k++)
        {
            if (arr[j] == arr[k] && j <= k)
            {
                printf("%d ", arr[j]);
                m++;
                break;
            } 
            if (arr[j] == arr[k] && j > k)
            {
                m++;
                break;
            } 
        }
        if(m == 0)
        {
            printf("%d ", arr[j]);
        }
    }
    return 0;
}

发表于 2024-08-10 14:30:14 回复(0)
include <stdio.h>

int main() {
int n = 0;
scanf("%d",&n);
int arr[1000]={0};
int i= 0;
for(i=0;i<n;i++)
{
scanf("%d ",&arr[i]);
}
int count = 0;

for(i=0;i<n-count;i++)
{
int j = 0;
for(j=i+1;j<n-count;j++)
{
if(arr[i]==arr[j])//找到这个数
{
int z = j;
for(z=j;z<n;z++)
{
arr[z]=arr[z+1];
}
count++;
i--;//若有数重复,应当再一次检查这个数,直到未接测到重复数为止
}
}
}

for(i=0;i<n-count;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
发表于 2024-07-05 14:30:05 回复(0)
#include <stdio.h>
#include <stdlib.h>

void Distincy(int n)
{
    int* a = malloc(sizeof(int) * n);
    int sum = 0;
    for(int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    //时间复杂度为O(N^2),我感觉不是很好,应该有其他方式优化
    for(int i = 0; i < n; i++)
    {
        //不能本身比,不然就会变-1,
        //前面比完,后面一定和前面不同
        for(int j = i + 1; j < n; j++)
        {
            if(a[i] == a[j])
                a[j] = -1;
        }
    }

    for(int i = 0; i < n; i++)
    {
        if(a[i] != -1)
            printf("%d ", a[i]);
    }
    free(a);
    a = NULL;
}

int main() 
{
    //原理a^a = 0,a^0 = a
    int n;
    scanf("%d", &n);
    Distincy(n);
    return 0;
}

发表于 2024-06-28 22:14:05 回复(0)
#include <stdio.h>//我这样写对吗,输入一个数字,与前面比较,如果有相同则变成0
int main() {
    int a = 0;
    scanf("%d", &a);
    int arr[a];
    int all = 1;
    int count = 0;
    for (int i = 0; i < a; i++) {
        scanf("%d", &arr[i]);
        for (int j = 0; j < i; j++) {
            if (arr[j] == arr[i]) {
                arr[i] = 0;
            }
        }
    }
    for (int i = 0; i < a; i++) {
        if (arr[i] != 0) {
            printf("%d ", arr[i]) ;
        }
    }
    return 0;
}
发表于 2024-06-22 15:52:08 回复(0)