【问题描述】
给定一个正整数的集合,要求对其中的数字进行重新排列,将被3整除的数按降序排在前半部分,不能被3整除的数按升序排在后半部分
【输入形式】
输入包括两行,第一行输入一个正整数n,第二行包括n个正整数,空格分隔,其中 1<=n <=100000
【输出形式】
输出为一行,包括n个正整数,每个数单个空格分隔,其中被3整除的数都排在不被3整除的数前面,且被3整除的数按降序排列,不能被3整除的数按升序排列
【样例输入】
5 33 82 93 79 33
【样例输出】
93 33 33 79 82
【样例说明】
样例中,能被3整数的数有三个:33,93,33。 这三个数按降序排列在前三个,其余不能被3整除的数有两个 79,82,按升序排在后两个,即为 93 33 33 79 82
【评分标准】
vector<int> a;//用来存放能被3整除的数字
vector<int> b;//用来存放不能被3整除的数字
int n,k;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>k;
if(k%3==0)
{
a.push_back(k);
}
else if(k%3!=0)
{
b.push_back(k);
}
}
//排序
sort(a.begin(),a.end());
sort(b.begin(),b.end());
//分别逆向正向输出a,b即可
for(int i=a.size()-1;i>=0;i--)
{
cout<< a[i] << " ";
}
for(int i=0;i<b.size();i++)
{
cout << b[i] << " ";
}