整除15问题

来源:互联网 发布:渲染软件有哪些 编辑:程序博客网 时间:2024/06/11 09:58

整除15问题

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)

Problem Description

给定一个只包含数字[0..9]的数字字符串,求使用字符串中的某些字符,构建一个能够整除15 最大的整数。注意,字符串中的每个字符只能使用一次。
编程任务:
求由给定字符串构建的能够整除15的最大整数。

Input

第一行为测试用例个数M,接下来每行为一个只包含数字[0..9]数字字符串,字符串的长度为1..1000。

Output

共M行,每行为将构建出的最大整数,如果无法构建出能够整除15的整数,则输出“impossible”。

Sample Input

40204112345890567234561234

Sample Output

420098653107665435impossible
#include<stdio.h>#include<string.h>void Set(int* a,char* s){int i,len;len=strlen(s);for(i=0;i<len;i++)a[s[i]-'0']++;}void Print(int* a){int i;for(i=9;i>0;i--)for(;a[i]>0;a[i]--)printf("%d",i);if(a[0]==0)printf("5");elsefor(;a[0]>0;a[0]--){printf("0");}printf("\n");}int main(){int a[10],m,i,p,sum,len,t,x;char s[10000];scanf("%d",&m);getchar();    for(p=0;p<m;p++){sum=0;memset(a,0,sizeof(a));gets(s);Set(a,s);len=strlen(s);if(a[0]==0&&a[5]==0) {printf("impossible\n");continue;}else{if(a[0]==0) {sum+=5;a[5]--;}for(i=0;i<10;i++)sum+=a[i]*i;if(sum%3==0);else{x=sum%3;t=1;for(i=0;i<3;i++)if(t==1&&a[x+i*3]){a[x+i*3]--;t--;}if(t==1){t++;for(i=0;i<3;i++){if(t==0) break;if(x==1&&a[i*3+2]){a[i*3+2]--;t--;i=-1;continue;}if(x==2&&a[i*3+1]){a[i*3+1]--;t--;i=-1;}}}for(i=0;i<10;i++)sum+=a[i]*i;}if(sum<3) printf("impossible\n");            elsePrint(a);}}return 0;}


0 0