因为给出的数字中一定包含1,2,3,4,而且1234是7的同余系。在所有的数字中挑出一组1234,以及所有的0,判断剩下的数字除7的余数,在数的末尾添加相应的由1234组成的四位数,再添上0,就AC了。
1 #include <iostream>
2 using namespace std;
3 const int mo[7]={4123,1324,1234,2341,1243,3421,3142};
4 int t;
5 int list[30];
6 int n;
7 char ch;
8 bool v[30];
9 int a[30],an;
10 bool fi;
11
12 bool number(char ch){
13 if (ch>='0'&&ch<='9') return true;
14 else return false;
15 }
16
17 int yu(int x){
18 if (x>1) return (yu(x-1)*10+a[x])%7;
19 if (x==1) return a[x]%7;
20 }
21
22 int calc(){
23 int re=0;
24 if (an>1) re=(yu(an-1)*10+a[an])%7;
25 if (an==1) re=a[1]%7;
26 return re;
27 }
28
29 int main(){
30 scanf("%d\n",&t);
31 for (;t>0;--t){
32 ch=getchar();
33 for (int i=1;i<=25;++i) list[i]=0;
34 n=0;
35 while (number(ch)){
36 list[++n]=ch-'0';
37 ch=getchar();
38 }
39 for (int i=1;i<=n;++i) v[i]=false;
40 fi=false;
41 for (int i=1;i<=4;++i){
42 for (int j=1;j<=n;++j) if (list[j]==i){
43 v[j]=true;
44 break;
45 }
46 }
47 int num0=0;
48 for (int i=1;i<=n;++i) if (list[i]==0){
49 v[i]=true;
50 ++num0;
51 }
52 an=0;
53 for (int i=1;i<=n;++i) if (!v[i]) a[++an]=list[i];
54 int f=calc();
55 for (int i=1;i<=an;++i) printf("%d",a[i]);
56 f=f*10000%7;
57 f=(7-f)%7;
58 printf("%d",mo[f]);
59 for (int i=1;i<=num0;++i) putchar('0');
60 cout<<endl;
61 }
62 }
63
posted on 2008-11-11 17:17
Joseph 阅读(328)
评论(0) 编辑 收藏 引用