题目描述
某大学的志愿者团队每个月都会去养老院为老人们理发。在需理发老人的名单中,志愿者得知有n位老人需要理发。根据惯例,应优先女性理发,且优先年龄最大的老人理发(不管年龄多大,只要是女性就会比男性优先理发)。请你根据名单中老人的性别和年龄,为志愿者排除最科学的理发顺序。
输入描述
第一行为需要理发老人的编号;
第二行为老人的性别,女性=1,男性=0;
第三行为老人的年龄n(n<=1<=100),用空格分隔;需要注意老人的性别和年龄按数字顺序是一一对应的。
输出描述
输出理发的顺序(即需要理发老人的编号,且每个老人编号用空格隔开)
样例输入
1 2 3 4 5
1 0 1 0 1
65 67 87 76 98
样例输出
5 3 1 4 2
思路
先把女性都找到,按女性年龄顺序排序,在把男性找到,按照男性年龄顺序排序,最后输出编号就好。
代码
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
int main()
{
int num[999];
int sex[999];
int age[999];
//输入老人编号
int i = 0;
cin >> num[i++];
while (getchar() != '\n')
{
cin >> num[i++];
}
//得到输入老人的数量
int temp = i;
//输入对应老人的性别
i = 0;
cin >> sex[i++];
while (getchar() != '\n')
{
cin >> sex[i++];
}
//输入对应老人的年龄
i = 0;
cin >> age[i++];
while (getchar() != '\n')
{
cin >> age[i++];
}
vector <int> man; //保存男性年龄
vector <int> woman; //保存女性年龄
vector <int> a; //保存编号
for (int i = 0; i < temp; i++)
{
if (sex[i] == 1)
{
woman.push_back(age[i]); //存女性年龄
}
if (sex[i] == 0)
{
man.push_back(age[i]); //存男性年龄
}
}
sort(woman.begin(), woman.end()); //从小到大排序
sort(man.begin(), man.end());
for (int i = 0; i < man.size(); i++)
{
for (int j = 0; j < temp; j++)
{
if (man[i] == age[j])
{
a.push_back(j); //找到男性编号,从小到大保存
}
}
}
for (int i = 0; i < woman.size(); i++)
{
for (int j = 0; j < temp; j++)
{
if (woman[i] == age[j])
{
a.push_back(j); //找到女性编号,从小到大保存
}
}
}
for (int i =(a.size() - 1); i >=0; i--) //输出,从最后一位到第一位输出
{
cout << a[i]+1 << ' ';
}
return 0;
}