首页 > 试题广场 >

序列中整数去重

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

输入描述:

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



输出描述:

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

示例1

输入

5
10 12 93 12 75

输出

10 12 93 75
#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)
#include <stdio.h>

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

    //判断
    //从第一个数开始,每次判断一个数
    for(int i = 0; i < n ; i++){
        //判断arr[i]后面是否有重复整数
        for(int j = i+1; j < n; j++){
            //如果有,将后面的重复数变为-1
            if(arr[i] == arr[j]){
                arr[j] = -1;
            }
        }
    }
    //此时,数组中只有不重复数和-1

    //打印
    for(int i = 0; i < n; i++){
        //打印不是-1的数
        if(arr[i] != -1)
            printf("%d ", arr[i]);
    }
    return 0;
}

编辑于 2024-03-03 10:57:26 回复(0)
#include <stdio.h>

int main() {
    int n, val, count = 0;
    int arr[5001]; // 可以包含1-5000所有数的数组,用来记录 出现过的数字
    int arrx1[1000]; // 按输入顺序,记录 不重复的数字
    scanf("%d", &n);
    for (int i = 0; i < n; i++){
        scanf("%d", &val);
        if (arr[val] != val){
            arr[val] = val;
            arrx1[count] = val;
            count += 1;
        }
    }
    for (int j = 0; j < count ; j++){
        printf("%d ", arrx1[j]);
    }

    return 0;
}

编辑于 2024-02-10 10:37:49 回复(0)
#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int str[n];
    for(int i=0; i<n; i++){
        scanf("%d", &str[i]);
        int tag=0;
        for(int x=0; x<i; x++){
            str[i]==str[x]?tag++:0;
        }
        if(tag==0){
            printf("%d ", str[i]);
        }
    }
    return 0;
}

发表于 2024-01-30 22:26:31 回复(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]);
    }
    for (i = 0; i < n; i++) {
        int j = 0;
        for (j = i + 1; j < n; j++) {
//先找出相同的元素
//如果相等,要把后续元素往前移动
            if (arr[i] == arr[j]) {
                int k = 0;
                for (k = j; k < n - 1; k++) {
                    arr[k] = arr[k + 1];
                }
                n--;//去重一个,个数少1
                j--;
//如果去重了arr[j]
//把下一个位置的数字arr[j+1],放在新的arr[j]上
//恰好又和arr[i]相同,所以也要再判断
//3 2 3 3 3 4 5
//
            }
        }
    }
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

发表于 2024-01-23 10:53:10 回复(0)
#include <stdio.h>

void solve()
{
	int n = 0,length = 0;
	int arr1[1010] = { 0 }, arr2[5050] = { 0 };
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		int x = 0;
		scanf("%d", &x);
		if (arr1[x] == 0)
		{
			arr1[x]++;
			arr2[length++] = x;
		}
	}
	for (int j = 0; j < length; j++) printf("%d ", arr2[j]);
	printf("\n");
}

int main()
{
	solve();
	return 0;
}

发表于 2024-01-16 15:49:41 回复(0)
#include <stdio.h>

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

    for (i = 0; i < n; i++)
    {
        if(i==n-1)
        {
            arr2[i]=arr1[i];
        }
        int flag = 0;
        int j = 0;
        for (j = i + 1; j < n; j++)
        {
            if (arr1[i] != arr1[j])
            {
                flag = 1;
            }
            else
            {
                arr1[j]=0;
            }
        }
        if (flag == 1)
        {
            arr2[i] = arr1[i];
        }
    }
    for (i = 0; i < n; i++)
    {
        if(arr2[i]!=0)
        {
            printf("%d ", arr2[i]);
        }
    }
    return 0;
}

发表于 2023-12-16 21:17:47 回复(0)
#include <stdio.h>
int main()
{
   int n=0;
   scanf("%d",&n);
   int arr[n];
   for(int i=0;i<n;i++)
   {
     scanf("%d",&arr[i]);
     for(int j=0;j<i;j++)
     {
        if(arr[j]==arr[i])
        {
            i--;
            n--;
           break;
        }
     }
   }
   for(int i=0;i<n;i++)
   {
    printf("%d ",arr[i]);
   }
    return 0;
}

发表于 2023-12-10 17:06:16 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int arr[100] = {0};
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (int a = 0; a < n; a++)
    {
        int j = 0;
        for (j = a; j < n-1; j++) 
        {
            if (arr[a] == arr[j + 1])
            {
                arr[j + 1] = 0;
            }
        }
    }
    for (int b = 0; b < n; b++)
    {
        if (arr[b] != 0)
        {
            printf("%d ", arr[b]);
        }
    }
    return 0;
}
编辑于 2023-12-06 11:11:06 回复(0)
#include <stdio.h>

int main()
{
    int n = 0;
    int arr[100];
    while(scanf("%d",&n)!=EOF)
    {
        for(int i = 0;i<n;i++)
        {
            scanf("%d",&arr[i]);
        }
        //找到重复的数赋值为0
        for(int i = 0;i<n;i++)
        {
            for(int j = n-1;j>i;j--)
            {
                if(arr[i]==arr[j])
                {
                    arr[j]=0;
                }
            }
        }
        //排除为0的数
        for(int i = 0;i<n;i++)
        {
            if(arr[i]!=0)
            {
                printf("%d ",arr[i]);
            }
        }
    }
    return 0;
}

发表于 2023-11-18 22:44:18 回复(0)
#include <stdio.h>

int main()
{
    int arr[1000] = {0};
    int n = 0;

    scanf("%d", &n);

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

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

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

    return 0;
}
发表于 2023-11-11 17:10:39 回复(0)
#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int arr[n];
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d ",arr+i);
    }
    int flag = 1;
    for(i=0;i<n;i++)
    {
        int j;
        for(j=0;j<i;j++)
        {
            if(arr[i]==arr[j])
            {
                flag = 0;
                break;
            }
        }
        if(flag == 1)
        {
            printf("%d ",arr[i]);
        }
        flag = 1;
    }
    return 0;
}

发表于 2023-11-07 11:25:11 回复(0)