Description
给出一个正整数N,含数字1、2、3、4,把N的所有数字重新排列组成一个新数,要求是14的倍数且最低四位是1、2、3、4的排列的最大整数。
Input
第一行含一个正整数k,为所需计算的实例个数。从第2行到第k+1行,各包含一个整数N(104<N<109).
Output
对应每个实例输出一行,每行含一个整数,表示满足条件的最大整数。
Sample Input
2
654321
1234
Sample Output
653142
4312
KEY:这题其实到现在也搞不清楚,为什么重要保证前面最大再加上后面的组合就可以被14整除……很迷糊的AC了
Source:

#include<iostream>
using namespace std;

int a[11];

int b[15]=...{4312,4132,3412,3214,3142,3124,2314,2134,1432,1342,1324,1234};
int n;
unsigned long m;

void init()

...{
int i,j;
long t=n;
m=0;
for(i=0;i<=9;i++)
a[i]=0;
while(t!=0)

...{
a[t%10]++;
t=t/10;
}
for(i=1;i<=4;i++)
a[i]--;
for(i=9;i>0;i--)
for(j=1;j<=a[i];j++)
m=m*10+i;
m=m*10000;
}

int main()

...{
// freopen("fjnu_1970.in","r",stdin);
int N;
cin>>N;
int i,j;
for(i=1;i<=N;i++)

...{
cin>>n;
init();
for(j=0;j<12;j++)
if( (m+b[j])%14==0) break;
m+=b[j];
cout<<m<<endl;
}
}







