恩,因为一定有1,2,3,4。而且1234可以组合出mod7的值为0到6的数,所以就先留下一组1234,其他直接输出(注意0不能开头),然后用1234来将mod7的值配成0。
CO
/*
PROGRAM: $PROGRAM
AUTHOR: Su Jiao
DATE: 2010-4-15
DESCRIPTION:
$DESCRIPTION
*/
#include <stdio.h>
#include <string.h>
#define MAXLEN 20
int N;
char num[MAXLEN+1];
int counter[10];
int main()
{
scanf(“%d\n”,&N);
for (int i=0;i<N;i++)
{
scanf(“%s\n”,num);
memset(counter,0,sizeof(counter));
for (char* j=num;*j;j++)
counter[*j-‘0’]++;
int mod7=0;
for (int j=9;j>4;j–)
for (int k=0;k<counter[j];k++)
{
printf(“%d”,j);
mod7=(mod7*10+j)%7;
}
for (int j=4;j>0;j–)
for (int k=1;k<counter[j];k++)
{
printf(“%d”,j);
mod7=(mod7*10+j)%7;
}
for (int k=-4;k<counter[0];k++)
mod7=(mod7*10)%7;
int mod1234=1;
for (int k=0;k<counter[0];k++)
mod1234=(mod1234*10)%7;
bool printed=false;
for (int i1=1;i1<=4&&!printed;i1++)
for (int i2=1;i2<=4&&!printed;i2++)
for (int i3=1;i3<=4&&!printed;i3++)
for (int i4=1;i4<=4&&!printed;i4++)
if (i1!=i2&&i1!=i3&&i1!=i4
&&i2!=i3&&i2!=i4
&&i3!=i4)
if (((i1*1000+i2*100+i3*10+i4)*mod1234+mod7)%7==0)
{
printf(“%d%d%d%d”,i1,i2,i3,i4);
printed=true;
}
for (int k=0;k<counter[0];k++)
printf(“0”);
printf(“\n”);
}
return 0;
}