听了学长的讲解才写出来的,也看了一些其他的博客,有的有点麻烦,有的和本文的思路一样
注意:
1不是质数
除了2以外没有任何的质数是偶数,所以,在一个质数后面再加一个奇数,它一定不是质数
如果数组里全是1或者2,直接输出就行了,其他情况,只需要先输出一个“2 1”(因为2是唯一一个偶数的质数,接着3也是质数),然后再输出剩下的2(质数加上偶数才可能是奇数),最后再输出剩下的1就可以了
#include<bits/stdc++.h>
using namespace std;
int s[200050];
int main()
{
int i,j,k,t,a,b,ta,tb;
while(cin>>t)
{
a=0,b=0;
for(i=0;i<t;i++){
cin>>s[i];
if(s[i]==1)a++;//记录1和2的数量
else if(s[i]==2)b++;
}
if(!(a&&b)){
//如果两个有一个为0
for(i=0;i<t;i++){
if(i==0)cout<<s[i];
else cout<<" "<<s[i];
}
}
else{
//至少有一个1和2
cout<<"2 1";
for(i=0;i<b-1;i++)cout<<" 2";
for(i=0;i<a-1;i++)cout<<" 1";
}
cout<<endl;
}
}