|
发表于 2023-5-8 17:51:17
|
显示全部楼层
本楼为最佳答案
这道题让我们求两个集合的差集,我们可以使用数组来存储集合元素,并通过循环遍历比较两个集合中的元素是否相等,若存在,则把该元素从第一个集合中删除。最后输出第一个集合中剩余的元素即可。
以下是C语言的代码实现:
- #include <stdio.h>
- #define MAX_SIZE 100
- /* 删除数组a中第i个位置上的元素 */
- void delete(int a[], int i, int len)
- {
- for (int j = i; j < len - 1; j++)
- {
- a[j] = a[j + 1];
- }
- }
- int main()
- {
- int A[MAX_SIZE], B[MAX_SIZE];
- int nA = 0, nB = 0;
- /* 输入集合A */
- scanf("%d", &A[nA]);
- while (A[nA] != -1)
- {
- nA++;
- scanf("%d", &A[nA]);
- }
- /* 输入集合B */
- scanf("%d", &B[nB]);
- while (B[nB] != -1)
- {
- nB++;
- scanf("%d", &B[nB]);
- }
- /* 求A、B的差集 */
- for (int i = 0; i < nA; i++)
- {
- for (int j = 0; j < nB; j++)
- {
- if (A[i] == B[j])
- {
- delete(A, i, nA); /* 删除A中的该元素 */
- nA--; /* 数组长度减1 */
- i--; /* 避免漏掉后面的元素 */
- break; /* 找到该元素后退出内层循环 */
- }
- }
- }
- if (nA != 0) /* 差集不为空集,输出结果 */
- {
- for (int i = 0; i < nA; i++)
- {
- printf("%d ", A[i]);
- }
- printf("\n");
- }
- return 0;
- }
复制代码
需要注意的一点是在删除元素后,循环遍历的索引需要减1,以免跳过后面的元素。在此代码中,在执行删除操作后,将i--来重新指向当前位置,以便处理下一个元素。
有用请设置最佳答案 |
|