C语言实现两组整数交集求解
C语言实现两组整数交集求解
问题描述
从标准输入中输入两组整数(每组不超过20个整数,每组整数中的元素不重复,并且整数大于等于0),编程求两组整数的交集,即在两组整数中都出现的整数,并按从小到大顺序排序输出。若交集为空,则什么都不输出。
输入形式
在两行上分别输入两组整数,以一个空格分隔各个整数,以-1作为输入结束。
输出形式
按从小到大顺序排序输出两组整数的交集(以一个空格分隔各个整数,最后一个整数后的空格可有可无)。
样例输入
'1 2 3 4 5 -1' '3 4 5 6 7 -1'
样例输出
'3 4 5'
代码实现
#include <stdio.h>
#include <stdlib.h>
int main() {
int set1[20], set2[20];
int i = 0, j = 0, k = 0;
int intersection[20];
// 输入第一组整数
printf("输入第一组整数(以-1结束):\n");
while (1) {
scanf("%d", &set1[i]);
if (set1[i] == -1) {
break;
}
i++;
}
// 输入第二组整数
printf("输入第二组整数(以-1结束):\n");
while (1) {
scanf("%d", &set2[j]);
if (set2[j] == -1) {
break;
}
j++;
}
// 求交集
for (i = 0; i < 20; i++) {
for (j = 0; j < 20; j++) {
if (set1[i] == set2[j]) {
intersection[k] = set1[i];
k++;
break;
}
}
}
// 输出交集
if (k == 0) {
// 交集为空
} else {
// 按从小到大顺序排序输出交集
for (i = 0; i < k - 1; i++) {
for (j = i + 1; j < k; j++) {
if (intersection[i] > intersection[j]) {
int temp = intersection[i];
intersection[i] = intersection[j];
intersection[j] = temp;
}
}
}
for (i = 0; i < k; i++) {
printf("%d ", intersection[i]);
}
}
return 0;
}
代码说明
- 使用两个数组
set1和set2存储输入的两组整数。 - 使用一个数组
intersection存储两组整数的交集。 - 使用三个循环遍历两组整数,如果两个整数相等,则将该整数存入
intersection数组。 - 使用两个循环对
intersection数组进行排序,使其按从小到大顺序排列。 - 输出
intersection数组中的所有元素。
注意
- 代码中使用了
stdlib.h头文件,该头文件包含了qsort函数,可以使用该函数对数组进行排序。 - 代码中使用了
break语句,该语句用于退出循环。 - 代码中使用了
temp变量进行排序,该变量用于暂存数据。 - 代码中使用了
printf函数进行输出,该函数用于输出格式化的字符串。
原文地址: https://www.cveoy.top/t/topic/o1xe 著作权归作者所有。请勿转载和采集!