随笔 - 32  文章 - 2  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(3)

随笔档案

文章档案

搜索

  •  

积分与排名

  • 积分 - 8416
  • 排名 - 1249

最新评论

阅读排行榜

评论排行榜

因为给出的数字中一定包含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>1return (yu(x-1)*10+a[x])%7;
19     if (x==1return 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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理