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;
}

代码说明

  1. 使用两个数组 set1set2 存储输入的两组整数。
  2. 使用一个数组 intersection 存储两组整数的交集。
  3. 使用三个循环遍历两组整数,如果两个整数相等,则将该整数存入 intersection 数组。
  4. 使用两个循环对 intersection 数组进行排序,使其按从小到大顺序排列。
  5. 输出 intersection 数组中的所有元素。

注意

  • 代码中使用了 stdlib.h 头文件,该头文件包含了 qsort 函数,可以使用该函数对数组进行排序。
  • 代码中使用了 break 语句,该语句用于退出循环。
  • 代码中使用了 temp 变量进行排序,该变量用于暂存数据。
  • 代码中使用了 printf 函数进行输出,该函数用于输出格式化的字符串。
C语言实现两组整数交集求解

原文地址: https://www.cveoy.top/t/topic/o1xe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录