PTA 天梯赛 L1-030 一帮一 (15 分) c++ 另辟蹊径-pair的使用 AC代码

PTA 天梯赛 L1-030 一帮一 (15 分) c++ 另辟蹊径-pair的使用 AC代码,第1张

PTA 天梯赛 L1-030 一帮一 (15 分) c++ 另辟蹊径-pair的使用 AC代码

原题链接 L1-030

前言

这道题基本就是从前向后遍历,找到符合的配对
解题的两个关键在于如何保存学生信息已经性别的匹配问题。

解题思路 1
  • 记录学生信息:

pair stu[n];

  • 性别的区分:
  • 用两个指针 p0 和 p1 分别指向最后一个性别是女/男的学生
  • 若当前待配对的学生性别为1 则找p0指向的学生配对
解题思路 2
  • 用同1的方法记录信息
  • 性别的区分:
  • 循环时,判断两者性别值是否相等且当前学生是否已配对
  • 已配对的学生的性别值置为**-1**
代码1
#include  //15/15  在后面设两个指针
#include 
using namespace std;
int main()
{
    int n;
    cin >> n;
    pair stu[n];
    for (int i = 0; i < n; i++)
        cin >> stu[i].first >> stu[i].second;
    int p0 = n-1, p1 = n-1;
    while (stu[p0].first)    p0--; //找到最后一个 性别为0 的
    while (!stu[p1].first)   p1--; //找到最后一个 性别为1 的
    for (int i = 0; i < n / 2; i++)
    {
        if (stu[i].first == 0)
        {
            cout << stu[i].second << ' ' << stu[p1--].second; //记得p1要移动 否则下面的循环进不去
            while (!stu[p1].first)      p1--;                 //向前更新指针的值
        }
        else
        {
            cout << stu[i].second << ' ' << stu[p0--].second;
            while (stu[p0].first)       p0--; 
        }
        if (i != n / 2)
            cout << endl;
    }
    system("pause");
    return 0;
}

代码2
#include  //15/15  在后面设两个指针
#include 
using namespace std;
int main()
{
    int n;
    cin >> n;
    pair stu[n];
    for (int i = 0; i < n; i++)
        cin >> stu[i].first >> stu[i].second;
    for (int i = 0; i < n / 2; i++)
    {
        for (int j = n - 1; j >= n / 2; j--)//每次都从最后开始向前遍历
        {
            if (stu[i].first != stu[j].first && stu[j].first != -1) //异性&&未配对
            {
                cout << stu[i].second << ' ' << stu[j].second;
                stu[j].first = -1;//标志 已配对
                if (i != n / 2)
                    cout << endl;
                break;
            }
        }
    }
    system("pause");
    return 0;
}
写在最后

若文章存在问题,还请各位大佬批评指正,共同进步

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5659152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存