使用给定的数字查找偶数

时间:2018-01-15 02:29:54

标签: groovy soapui

我必须使用给定数字的数字

找到最大的偶数

输入: 7876541
所需输出: 8776514

任何人都可以帮我解释逻辑吗?

2 个答案:

答案 0 :(得分:2)

这个怎么样?

  • 将其转换为字符串
  • 按相反顺序对数字进行排序
  • 加入并将其转换为数字
def n = 7876541
def newN = (n.toString().split('').findAll{it}.sort().reverse().join()) as Integer
println newN

您可以快速在线试用 demo

编辑:根据OP评论,更新答案。

这是你可以做的 -
  - 找到数字的排列
  - 找到偶数号   - 按最大数量过滤。

已经找到thread来查找排列,因此重新使用它几乎没有变化。致JavaHopper

当然,它可以通过groovified简化。

class Permutations {
  static def list = []
  public static void printPermutation(char[] a, int startIndex, int endIndex) {
    if (startIndex == endIndex)
        list << ((new String(a)) as Integer)
    else {
        for (int x = startIndex; x < endIndex; x++) {
            swap(a, startIndex, x)
            printPermutation(a, startIndex + 1, endIndex)
            swap(a, startIndex, x)
        }
    }
  }
  private static void swap(char[] a, int i, int x) {
    char t = a[i]
    a[i] = a[x]
    a[x] = t
  }

}
def n = 7876541
def cArray = n.toString().toCharArray()
Permutations.printPermutation(cArray, 0, cArray.size())
println Permutations.list.findAll { it.mod(2) == 0}?.max()

快速在线试用 demo

答案 1 :(得分:0)

无需创建排列。 试试这个解决方案:

  • 将源编号转换为字符串。
  • 将字符串拆分为数组
  • 暂时按升序排序数字
  • 找到第一个偶数的索引
  • 从数组中删除此数字(将其存储在变量中),
  • 反转数组并添加删除的数字
  • 连接数组中的数字并将其转换为整数。

所以整个脚本如下所示:

def inp = 7876541
def chars1 = inp.toString().split('')
// findAll{it} drops an empty starting element from the split result
def chars2 = chars1.findAll{it}.sort()
// Find index of the 1st even digit
def n = chars2.findIndexOf{it.toInteger() % 2 == 0}
def dig = chars2[n]     // Store this digit
chars2.remove(n)        // Remove from the array
def chars3 = chars2.reverse()   // Descending order
chars3.add(dig)         // Add the temporarily deleted number
def out = (chars3.join()) as Integer    // result
println out