第一行输入一个整数
代表数组
中的元素个数。
第二行输入
个整数
代表数组
中的元素。
第三行输入一个整数
代表数组
中的元素个数。
第四行输入
个整数
代表数组
中的元素。
输出按升序合并、去重后的数组。
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;
}