杭电ACM:人见人爱A-B

杭电ACM算法解析:A到B的解题思路
本文详细介绍了杭电ACM比赛中人见人爱的A-B问题,从问题背景到解题策略,深入剖析了算法实现的关键步骤,包括数据结构的选择和优化技巧,帮助读者理解并掌握此类问题的解决方法。
//A集合相对于B集合的差集
#include <iostream>
using namespace std;
int main(){
    int A[100], B[100], C[100];
    int n, m;
    //第一次提交,(n != 0 && m != 0),&& 和 || 一段时间不用不记得- -
    while (cin >> n >> m && (n != 0 || m != 0)){
        int x = 0,temp=0;
        //输入
        for (int i = 0; i < n; i++)
            cin >> A[i];
        for (int j = 0; j < m; j++)
            cin >> B[j];
        //A集合的单个跟B集合每个比较,到B集合尾仍然不同,保存到C集合中
        for (int i = 0; i < n; i++){
            int num = 0;
            for (int j = 0; j < m; j++){
                if (A[i] != B[j])
                    num++;
                else
                    break;
            }
            //这里temp是统计有多少个差值;
            if (num == m){
                C[x++] = A[i];
                temp++;
            }

        // 求 A-B ,不用求B中相对于A多出来的数 
        /*
        //B集合的单个跟A集合每个比较,到A集合尾仍然不同的,保存到C集合中
        for (int j = 0; j < m; j++){
            int num = 0;
            for (int i = 0; i < n; i++){
                if (B[j] != A[i]){
                    num++;
                }
                else
                    break;
            }
            if (num == n)
                C[x++] = B[j];
        }
        */

        if (temp == 0){
            cout << "NULL" << endl;
        }
        else{
            //C集合冒泡排序,小的在前
            for (int i = 0; i < x-1; i++){
                for (int j = i + 1; j < x; j++){
                    if (C[i]>C[j])
                    {
                        //小的放前面一位;
                        C[i] = C[i] + C[j];
                        C[j] = C[i] - C[j];
                        C[i] = C[i] - C[j];
                    }
                }
            }
            //输出
            for (int y = 0; y < x; y++){
                cout << C[y] << " ";
            }
            cout << endl;
        }
        x = 0;
        temp = 0;
    }
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值