能被15整除的最大整数

能被15整除的最大整数

给定一个只包含数字 [0..9] 的字符串,求使用字符串中的某些字符,构造一个能够被15整除的最大整数。注意,字符串中的每个字符只能使用一次。 输入:程序从标准输入读入数据,每行数据由一串数字组成,长度为1到1000。 输出:针对每一行输入,输出一个结果,每个结果占一行。如果无法构造出能够被15整除的整数,请输出impossible。
测试输入
1
01431
103
测试输出
impossible
43110
30
源代码
#include <iostream>  
#include <cstring>  
using namespace std;  
int main(int argc, char *argv[])  
{       
    char a[1000];  
    int b[10];  
    int len;    
    int i, j, sum = 0, flag = 0, temp = 0;  
    while( cin>>a )  
    {          
        flag = 0, temp = 0;  
        for( i = 0; i < 10; i++ )    
            b[i] = 0;  
        sum = 0;    
        len = strlen( a );  
        for( i = 0; i < len; i++ )   
        {                  
            b[ a[i] - '0' ]++;  
            sum += ( a[i] - '0' );  
        }  
                 
        if( sum == 0 )   
        {    
            cout<<"0"<<endl;  
        }    
        else if( b[0] != 0 || b[5] != 0 ) //有0和5的情况  
            {  
                if( sum % 3 == 0 )//数字串的和是3的倍数  
                {  
                    if( b[0] != 0 )  
                    {  
                        b[0]--;  
                        temp = 1;  
                    }  
                    else  
                        b[5]--;  
                          
                    for( i = 9; i >= 0; i-- )//输出满足题意的结果  
                    {  
                        for( j = 1; j <= b[i]; j++ )  
                        {  
                            cout<<i;  
                            //printf("%d",i);  
                        }  
                    }  
                    if( temp == 1 ) //最后一位置为0  
                        cout<<"0"<<endl;  
                    else  
                        cout<<"5"<<endl;     //最后一位置为5  
                }  
                else if( sum % 3 == 1 )//数字串的和是3的倍数余1  
                    {  
                        for( i = 1; i <= 9; i += 3 )  
                        {  
                            if( b[i] != 0 )  
                            {  
                                b[i]--;  
                                sum -= i;  
                                flag = 1;  
                                break;  
                            }  
                        }  
                        if( flag == 0 )  
                        {  
                            if( b[2] >= 2 )  
                            {  
                                b[2] -= 2;  
                                flag = 1;  
                                sum -= 4;  
                            }  
                            else if( (b[2] >= 1) && (b[5] >= 1) )  
                                {  
                                    b[2]--;  
                                    b[5]--;  
                                    flag = 1;  
                                    sum -= 7;  
                                }  
                                else if( b[5] >= 2 )  
                                    {  
                                        b[5] -= 2;  
                                        flag = 1;  
                                        sum -= 10;  
                                    }  
                                    else if( (b[2] >= 1) && (b[8] >= 1) )  
                                        {  
                                            b[2]--;  
                                            b[8]--;  
                                            flag = 1;  
                                            sum -= 10;  
                                        }  
                                        else if( (b[5] >= 1) && (b[8] >= 1) )  
                                            {  
                                                b[5]--;  
                                                b[8]--;  
                                                flag = 1;  
                                                sum -= 13;  
                                            }  
                                            else if( b[8] >= 2 )  
                                                {  
                                                    b[8] -= 2;  
                                                    flag = 1;  
                                                    sum -= 16;  
                                                }  
                        }  
                        if( flag == 1 )  
                        {  
                            if( sum == 0 )  
                            {  
                                if( b[0] == 0 )  
                                    cout<<"impossible"<<endl;  
                                else  
                                    cout<<"0"<<endl;  
                            }  
                            else  
                            {  
                                if( b[0] != 0 )  
                                {  
                                    b[0]--;  
                                    temp = 1;  
                                }  
                                else  
                                    b[5]--;  
                                for( i = 9; i >= 0; i-- )  
                                {  
                                    for( j = 1; j <= b[i]; j++ )  
                                    {  
                                        cout<<i;  
                                    }  
                                }  
                                if( temp == 1 )  
                                    cout<<"0"<<endl;  
                                else  
                                    cout<<"5"<<endl;  
                            }  
                        }  
                        else if( b[0] != 0 )  
                                cout<<"0"<<endl;  
                            else  
                                cout<<"impossible"<<endl;  
                    }  
                    else  
                    {  
                        for( i = 2; i <= 9; i += 3 )  
                        {  
                            if( b[i] != 0 )  
                            {  
                                if( b[0] == 0 && i == 5 && b[i] == 1 )  
                                    continue;  
                                    b[i]--;  
                                    sum -= i;  
                                    flag = 1;  
                                    break;  
                            }  
                        }  
                        if( flag == 0 )  
                        {  
                            if( b[1] >= 2 )  
                            {  
                                b[1] -= 2;  
                                flag = 1;  
                                sum -= 2;  
                            }  
                            else if( (b[1] >= 1) && (b[4] >= 1) )  
                                {  
                                    b[1]--;  
                                    b[4]--;  
                                    flag = 1;  
                                    sum -= 5;  
                                }  
                                else if( b[4] >= 2 )  
                                    {  
                                        b[4] -= 2;  
                                        flag = 1;  
                                        sum -= 8;  
                                    }  
                                    else if( (b[1] >= 1) && (b[7] >= 1) )  
                                        {  
                                            b[1]--;  
                                            b[7]--;  
                                            flag = 1;  
                                            sum -= 8;  
                                        }  
                                        else if( (b[4] >= 1) && (b[7] >= 1) )  
                                            {  
                                                b[4]--;  
                                                b[7]--;  
                                                flag = 1;  
                                                sum -= 11;  
                                            }  
                                            else if( b[7] >= 2 )  
                                                {  
                                                    b[1] -= 2;  
                                                    flag = 1;  
                                                    sum -= 14;  
                                                }  
                        }  
                        if( flag == 1 )  
                        {  
                            if( sum == 0 )  
                            {  
                                if( b[0] == 0 )  
                                    cout<<"impossible"<<endl;  
                                else  
                                    cout<<"0"<<endl;  
                            }  
                            else  
                            {  
                                if( b[0] != 0 )  
                                {  
                                    b[0]--;  
                                    temp = 1;  
                                }  
                                else  
                                    b[5]--;  
                                for( i = 9; i >= 0; i-- )  
                                {  
                                    for( j = 1; j <= b[i]; j++ )  
                                    {  
                                        cout<<i;  
                                    }  
                                }  
                                if( temp == 1 )  
                                    cout<<"0"<<endl;  
                                else  
                                    cout<<"5"<<endl;  
                            }  
                        }  
                        else if( b[0] != 0 )  
                                cout<<"0"<<endl;  
                            else  
                                cout<<"impossible"<<endl;  
                    }  
            }  
            else  
                cout<<"impossible"<<endl;  
            memset( a, 0, 1000 );  
    }       
    return 0;    
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值