原题链接 L1-030
前言这道题基本就是从前向后遍历,找到符合的配对。
解题的两个关键在于如何保存学生信息已经性别的匹配问题。
- 记录学生信息:
pair
stu[n];
- 性别的区分:
解题思路 2
- 用两个指针 p0 和 p1 分别指向最后一个性别是女/男的学生
- 若当前待配对的学生性别为1 则找p0指向的学生配对
- 用同1的方法记录信息
- 性别的区分:
代码1
- 循环时,判断两者性别值是否相等且当前学生是否已配对
- 已配对的学生的性别值置为**-1**
#include代码2//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; }
#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; }
若文章存在问题,还请各位大佬批评指正,共同进步
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)