输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。
输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。
5 10 12 93 12 75
10 12 93 75
#include <stdio.h> int main(){ int n, x, arr[30]; scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d", &arr[i]); for(int i = 0; i < n; i++){ int count = 0; for(int j = 0; j <= i; j++){ //查询(0, i)之间当前元素出现次数 if(arr[i] == arr[j]) count++; } if(count == 1) //大于1说明重复 printf("%d ", arr[i]); } return 0; }
import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); Set<String> set = new LinkedHashSet<>(); for (int i = 0; i < n; i++) { set.add(Integer.toString(sc.nextInt())); } String res = set.stream().collect(Collectors.joining(" ")); System.out.println(res); } } }
#include <iostream> using namespace std; int main() { int a[1000],b[5000]={0},n;//b为标记数组 cin>>n; for(int i=0;i<n;++i) cin>>a[i]; for(int i=0;i<n;++i) if(b[a[i]]==0)//没有出现过 { cout<<a[i]<<" "; b[a[i]]=1;//标记已输出 } return 0; }
#include<bits/stdc++.h> using namespace std; int main() { int len,arr_num,flag_same = 0; cin>>len; int arr[len]; for(int i = 0;i<len;i++){ cin>>arr_num; arr[i] = arr_num; } for(int j = 0;j<len;j++){ for(int k = 0;k<j;k++){ if(arr[j] == arr[k]){ flag_same = 1; break; } } if(flag_same == 1){ //注意标识 要还原为0 flag_same = 0; continue; } cout<<arr[j]<<" "; } }
#include<stdio.h> int main() { int n = 0,arr[1000] = {0},count = 0; scanf("%d",&n); for(int i = 0;i < n;i++) scanf("%d",&arr[i]); int i = 0,j = 0,k = 0; 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]; arr[k] = '\0'; n--,j--; } } printf("%d ",arr[i]); } return 0; }
#include <stdio.h> int main(){ int n; scanf("%d", &n); int a[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]){ for(int k = j; k < n; k++) a[k] = a[k+1]; n--; j--; } } } for(int i = 0; i < n; i++) printf("%d ", a[i]); return 0; }
#include<stdio.h> int main() { int n; scanf("%d",&n); int arr[1000]; for(int i=0;i<n;i++) { scanf("%d",&arr[i]); int j; for(j=0;j<i;j++) { if(arr[j]==arr[i]) { break; } } if(j==i) { printf("%d ",arr[i]); } } }
#include <stdio.h> //下面的法一,会将该输入进行递增排序后输出,不会保留输入的顺序,还是需要重新优化的,看法二 /* int main() { int n = 0; int arr[5001] = {0}; int i = 0; scanf("%d",&n); for(i=0; i<n; i++) { //进行整数的存储 int tmp = 0; scanf("%d",&tmp); if( arr[tmp] == 0 ) arr[tmp]=1; } for(i=0; i<5001; i++) { if(arr[i] == 1) printf("%d ",i); } return 0; } */ //法二:此方法可能复杂度会过大,如要进一步优化,则可以参考方法三使用两个数组,在输入的时候便和输出数组进行对比! /* int main() { int n = 0; int arr[1000];//用于存储元素 scanf("%d",&n); int i = 0; //输入 for(i=0; i<n; i++) { scanf("%d",&arr[i]); } //去重 for(i=0; i<n; i++) { //判断下标为i的元素 arr[i] 是否在后面位置出现 int j = 0; for(j=i+1; j<n; j++) { if(arr[i] == arr[j]) { //去重 //将j+1的位置的元素全部向前移动一位! int k = 0; for(k=j; k<n-1; k++)//将k的范围最大固定到n-1,防止其越界访问 { arr[k]=arr[k+1]; } n--; j--;//为了避免j跳过元素,需要-- } } } //输出 for(i=0; i<n; i++) { printf("%d ",arr[i]); } return 0; }*/ //法三 int main() { int n; //第一行包含一个正整数n(1 ≤ n ≤ 1000) int arr1[1000]={0}; //作为输入数组存储信息 int arr2[1000]={0}; //作为输出数组用于筛选去重后的数字 scanf("%d",&n); int num=0;//用于统计去重后元素的个数 for(int i=0;i<n;i++){ int sum=0;//用于表示该元素是否为重复元素 scanf("%d ",&arr1[i]);//输入数组① for(int j=0;j<i;j++){ if(arr2[j]==arr1[i]){ //检测输出数组②中是否已经存在此数 sum=1; break; } } //sum=0说明if循环未进入则输出数组中无此数 //将满足的值输入二数组 if(sum==0) { //说明此时为非重复元素 arr2[num]=arr1[i];//将该元素存储到arr2输出数组中 num++;//个数++ } } for(int i=0;i<num;i++){ //输出去重后的数组 printf("%d ",arr2[i]); } return 0; }
#include<iostream> #include<stdio.h> int main(){ int n; scanf("%d",&n); int a[n]; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i!=j&&a[i]==a[j]){ a[j]=0; } } } for(int i=0;i<n;i++){ if(a[i]!=0){ printf("%d ",a[i]); } } return 0; }
#include <bits/stdc++.h> #include<map> using namespace std; int main(){ int n,k=0; int data; vector<int> a; cin>> n; cin.ignore(); if(n>0 && n<1001) for(int i=0;i<n;i++){ cin>>data; auto e = find(a.begin(),a.end(),data); if(e==a.end()) a.push_back(data); } for(auto j:a){ cout<<j<<" "; } return 0; }
#include<stdio.h> int main() { int n,i,j,p=0,flag=1; scanf("%d",&n); int a[n]; for(i=0;i<n;i++){ scanf("%d",&a[i]); for(j=0;j<i;j++){ if(a[i]==a[j]){ flag=0; break; //此处为continue或者break甚至两者都不写,都是可以的,因为这个for里面,没有使flag再=1的语句 } } if(flag) printf("%d ",a[i]); flag=1; } return 0; }不另构数组,直接输出,利用输入输出特性