整除15问题

给定一个只包含数字 [0..9] 的字符串,求使用字符串中的某些字符,构造一个能够被15整除的最大整数。注意,字符串中的每个字符最多只能使用一次。 输入:程序从标准输入读入数据,每行数据由一串数字组成,长度为1到1000。 输出:针对每一行输入,输出一个结果,每个结果占一行。如果无法构造出能够被15整除的整数,请输出impossible。

把0~9数分为如下几类:
第一类:0、3、6、9(除3余0)
第二类:2、5、8(除3余2)
第三类:1、4、7(除3余1)

首先我们考虑能否满足整除5,若能整除5然后考虑从原字串中删除最少而且最小的数使得满足整除3。

  • 情况1:构造的这个数各位数字和除3余0,这样不用删数。
  • 情况2:构造的这个数各位数字和除3余1,则只要删除余1的那一类数中最小的一个,如果数串中没有余1的数,就删除两个余2的数。
  • 情况3:构造的这个数各位数字和除3余2,则只要删除余1的那一类数中最小的两个。如果没有数串中没有余1的数,就删除一个最小的余2的数。

最后,剩余的数串以最大的并且以满足整除5的要求输出。

在0存在的时候,就按计数的顺序输出即可。

如果在数串中没有0,则必须有个5放在个位。

原文地址:https://www.cnblogs.com/allen-zm/p/8697194.html