第一行输入一个整数
代表数组
中的元素个数。
第二行输入
个整数
代表数组
中的元素。
第三行输入一个整数
代表数组
中的元素个数。
第四行输入
个整数
代表数组
中的元素。
输出按升序合并、去重后的数组。
3 1 2 5 4 -1 0 3 2
-101235
在这个样例中,拼接后得到
,去重后得到
,排序后得到
。
1 11 1 111
11111
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> bool isexist(int arr[], int len, int num); //检测重复元素 void insert_sort(int arr[], int len); //插入排序 void print(int arr[], int len); //打印数组,若有重复元素则只打印一次 int main() { int quantity1 = 0, quantity2 = 0, quantity3 = 0; //数组1、2、3的个数 int jishu_arr3 = 0; //计数数组3的元素数量 scanf("%d", &quantity1); int* arr1 = (int*)malloc(quantity1 * sizeof(int)); if (arr1 == NULL) { exit(-1); } for (int i = 0; i < quantity1; i++) { scanf("%d", &arr1[i]); } scanf("%d", &quantity2); int* arr2 = (int*)malloc(quantity2 * sizeof(int)); if (arr2 == NULL) { exit(-1); } for (int i = 0; i < quantity2; i++) { scanf("%d", &arr2[i]); } quantity3 = quantity1 + quantity2; int* arr3 = (int*)malloc(quantity3 * sizeof(int)); if (arr3 == NULL) { exit(-1); } for (int i = 0; i < quantity1; i++) { arr3[jishu_arr3] = arr1[i]; jishu_arr3++; } //去重插入第二个数组元素,缺点为若数组1有重复元素则无法去重数组1,故在打印输出时 //使用去重打印 for (int i = 0; i < quantity2; i++) { bool ret = isexist(arr3, jishu_arr3, arr2[i]); if (!ret) { arr3[jishu_arr3] = arr2[i]; jishu_arr3++; } } insert_sort(arr3, jishu_arr3); print(arr3, jishu_arr3); free(arr1); free(arr2); free(arr3); return 0; } /* 功能:检测num在数组arr里是否存在 * 参数:arr被检测的数组,len为arr长度,num为被检测的数字 * 返回值:存在返回true,不存在返回false */ bool isexist(int arr[], int len, int num) { for (int i = 0; i < len; i++) { if (arr[i] == num) return true; } return false; } void insert_sort(int arr[], int len) { for (int i = 1; i < len; i++) { int tmp = arr[i]; int j = i; while (j > 0 && arr[j - 1] > tmp) { arr[j] = arr[j - 1]; j--; } arr[j] = tmp; } } //打印数组,若有重复元素则只打印一次 void print(int arr[], int len) { int flag = 0; for (int i = 0; i < len; i++) { flag = 0; for (int j = i + 1; j < len; j++) { if (arr[i] == arr[j]) { flag = 1; } } if(flag == 0) printf("%d", arr[i]); } printf("\n"); }
#include <stdio.h> #include <stdlib.h> #include <string.h> int compare_func(int *a,int *b) { return *a > *b; } int main() { int* pArrA = 0; int* pArrB = 0; int* pArrOut = 0; int cntA = 0; int cntB = 0; scanf("%d", &cntA); pArrA = malloc(sizeof(int) * cntA); for (int i = 0; i < cntA; i++) { scanf("%d", pArrA + i); } scanf("%d", &cntB); pArrB = malloc(sizeof(int) * cntB); for (int i = 0; i < cntB; i++) { scanf("%d", pArrB + i); } int cntOut = cntA+cntB; pArrOut = malloc(sizeof(int)*cntOut); memcpy(pArrOut, pArrA, sizeof(int)*cntA); memcpy((char *)pArrOut + sizeof(int)*cntA, pArrB, sizeof(int)*cntB); qsort(pArrOut, cntOut, sizeof(int), compare_func); int val = *(pArrOut); printf("%d", val); for(int i=1;i<cntOut;i++){ if(*(pArrOut + i) != val){ printf("%d", *(pArrOut + i)); val = *(pArrOut + i); } } return 0; }
#include <stdio.h> #include<stdlib.h> int comp(const void*a,const void*b) //用来做比较的函数。 { return *(int*)a-*(int*)b; } int main() { int m,n,a[1000] = {0},i = 0; scanf("%d",&m); for(i = 0; i<m; i++)scanf("%d",&a[i]); scanf("%d",&n); for(; i<m+n; i++)scanf("%d",&a[i]); qsort(a,n+m,sizeof(int),comp); //调用qsort排序 for(int i = 0, temp = 0; i<m+n; i++){ if(a[i] != temp)printf("%d",a[i]),temp = a[i]; } return 0; }
#include <stdio.h> #define N 1000 int main() { int arr[N],m,i=0,j,temp,k=2; while(k>0) { scanf("%d",&m); while(m>0) { scanf("%d",&temp); if(i==0) arr[i++]=temp; else { for(j=0;j<i;j++) { if(temp==arr[j]) break; } if(j==i) arr[i++]=temp; } m--; } k--; } m=i; //sort for(i=0;i<m-1;i++) { for(j=0;j<m-1-i;j++) { if(arr[j]>arr[j+1]) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(i=0;i<m;i++) { printf("%d",arr[i]); } return 0; }我直接用一个数组完成,大力出奇迹。。。
#include "stdio.h" #include "string.h" /*快速排序之确定枢纽节点*/ int partition(int A[], int low, int high) { int pivot = A[low]; while(low < high) { while(low < high && A[high] >= pivot) high--; A[low] = A[high]; while(low < high && A[low] < pivot) low++; A[high] = A[low]; } A[low] = pivot; return low; } //快速排序递归函数 void QuickSort(int A[], int low, int high) { if(low<high) { int pivotpos = partition(A,low,high);//划分 QuickSort(A, low, pivotpos-1);//划分左表 QuickSort(A, pivotpos+1, high);//划分右表 } } int main() { int N = 0; int M = 0; while(scanf("%d", &N) != EOF) { int ZeroFlag = 0; int a[1000] = {0}; for(int i=0; i<N; i++) { scanf("%d", &a[i]); } scanf("%d", &M); for(int i=0; i<M; i++) { scanf("%d", &a[i+N]); } #if 0 int temp = 0; /*冒泡排序*/ int flag, ExcPos; for(int i= 1; i<(N+M); i++) { flag = 0; for(int j=N+M-1; j>=i; j--) { if(a[j-1] > a[j]) { temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; flag = 1;//本次有过交换,置1。 ExcPos = j;//记录交换的位置,j前面的数据已经有序 } } if(!flag)//数组已经有序 break; i = ExcPos; i--; } #elif 0 /*插入排序*/ int temp = 0; for(int i=1; i<N+M; i++) { int flag = 0; if(a[i-1] > a[i]) { temp = a[i]; int j; for(j=i; j>=1 && a[j-1] > temp; j--) { a[j] = a[j-1]; } a[j] = temp; } } #elif 1 /*快速排序*/ QuickSort(a, 0, N+M-1); #endif for(int i=0; i<(N+M); i++) { if(a[i-1] != a[i]) printf("%d", a[i]); } printf("\n"); } return 0; }