比较两组整数是否有相同的元素,每组整数个数不超过100。若有相同的元素,则按照由大到小的顺序输出相同的元素(重复出现的元素只输出一个)。c语言,如果没有相同元素,打印字符串:No Answer。

比较两组整数是否有相同的元素,每组整数个数不超过100。若有相同的元素,则按照由大到小的顺序输出相同的元素(重复出现的元素只输出一个)。如果没有相同元素,打印字符串:No Answer。

【输入形式】

首先从标准输入(键盘)输入第一组整数的个数,再输入第一组整数,以一个空格分割;然后输入第二组整数的个数,再输入第二组整数,以一个空格分割。

【输出形式】

按照由大到小的顺序向标准输出(显示器)输出两组整数中相同的元素,以一个空格分隔;如果没有相同元素,则打印“No Answer”。

【输入样例】

9
2 5 10 17 10 8 5 10 12
7
12 8 10 17 5 2 1009

【输出样例】

17 12 10 8 5 2

【样例说明】

输入两组整数
2 5 10 17 10 8 5 10 12
12 8 10 17 5 2 1009
由于这两个数组具有相同的元素,按照由大到小的顺序输出为:17 12 10 8 5 2。

#include <stdio.h>
#include <stdbool.h>

#define MAX_N 100

int a[MAX_N], b[MAX_N];
bool same[MAX_N * 2];

int cmp(const void *a, const void *b) {  // 降序排序
    return *(int *)b - *(int *)a;
}

int main() {
    int n, m;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    scanf("%d", &m);
    for (int i = 0; i < m; i++) scanf("%d", &b[i]);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            if (a[i] == b[j])  // 记录相同元素
                same[i + j] = true;
    bool has_common = false;
    for (int i = n + m - 2; i >= 0; i--)
        if (same[i]) {
            has_common = true;
            printf("%d ", a[i]);
            same[i] = false;
            // 同时搜索是否有重复出现的元素
            for (int j = i - 1; j >= 0; j--)
                if (same[j]) same[j] = false;
        }
    if (!has_common) printf("No Answer\n");
    else printf("\n");
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7564361
  • 除此之外, 这篇博客: 校内模拟赛 C语言 晚会问题(小明要组织一台晚会,总共准备了...)中的 小明要组织一台晚会,总共准备了n个节目。然后晚会的时间有限,他只能最终选择其中的m个节目。这n个节目是按照小明设想的顺序给定的,顺序不能改变。小明发现,观众你对于晚会的喜欢程度与前几个节目的好看成都有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推,小明给每个节目定义了一个好看值,请你帮助小明选择出m个节目,满足他的要求 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    输入格式:
           输入的第一行包含两个整数n,m,表示节目的数量。第二行包含n个整数,依次为每个节目的好看值。

    输出格式:
           输出一行包含m个整数,为选出的节目的好看值。

    样例输入:
    5 3
    3 1 2 5 4

    样例输出:
    3 5 4

    评测用例规模与约定:
           对于30%的评测用例,1<=n<=20;
           对于60%的评测用例,1<=n<=100;
           对于所有评测用例,1<=n<=100000,0<=节目的好看值<=100000。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^