比较两组整数是否有相同的元素,每组整数个数不超过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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:输入格式:
输入的第一行包含两个整数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。