云上day-19

题目描述

给定含有 n 个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。

题目链接:B2098 整数去重 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

输入格式

输入包含两行:

第一行包含一个正整数 n(1 ≤ n ≤ 20000),表示第二行序列中数字的个数;

第二行包含 n 个整数,整数之间以一个空格分开。每个整数大于等于 10 、小于等于 100。

输出格式

输出只有一行,按照输入的顺序输出其中不重复的数字,整数之间用一个空格分开。

解题思路

我们首先定义一个数组num用来判断下标为i的数出现的次数,初始化为0。然后循环输入n个数据,每次输入数据,相应的下标位置计数就加1,如果刚好计数为1,那么输出该数,否则跳过不输出。

解题代码

C代码

#include<stdio.h>
#include<string.h>
int main(){
    int n;
    scanf("%d",&n);
    int a[n];
    int flag[101];//flag数组记录出现次数
    memset(flag,0,sizeof(flag));
    for(int i = 0; i < n; i++){
    	scanf("%d",&a[i]);
    	flag[a[i]]++;
    	if(flag[a[i]] == 1)
    	printf("%d ",a[i]);
	}
	return 0;
}

C++代码

#include<iostream>

using namespace std;

const int N = 2010;
int a[N],n,len;     //len 记录输出长度
bool h[N];           //标记每一个数出现了多少次

int main()
{
    cin>>n;
    for(int i=0;i<n;i++){
        int t;
        cin>>t;
        //如果这个数之前没有出现过则加入a数组,并标记这个数为true
        if(h[t] == false) a[len ++] = t,h[t] = true;
    }
    for(int i=0;i<len;i++) cout<<a[i]<<' ';
    return 0;
}

Java代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //输入数据
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        int[] num = new int[105];//定义一个数组用来计算下标i出现的次数
        //由于输入的数均大于等于10,小于等于100,因此我们的数组大小为105
        //将数组初始化为0
        for (int i = 0; i <= 100; i++){
            num[i] = 0;
        }

        for (int i = 1; i <= n; i++){
            int temp = scanner.nextInt();//输入每个数据
            if(num[temp] == 0){
                //如果这个数没有出现过
                //那么输出这个数
                System.out.print(temp + " ");
                num[temp]++;//计数变为加1
            }
            //如果num[temp] != 0就不用管,直接跳过
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值