Groovy 使用给定的数字查找偶数

Groovy 使用给定的数字查找偶数,groovy,soapui,Groovy,Soapui,我必须用给定数字的数字找到可能的最大偶数 输入:7876541 期望输出:8776514 谁能帮我解释一下逻辑吗?这个怎么样 将其转换为字符串 将数字按相反顺序排序 加入它们并将其转换为数字 def n=7876541 def newN=(n.toString().split(“”).findAll{it}.sort().reverse().join())作为整数 普林顿纽恩 你可以在网上快速试用 编辑:根据OP评论,更新答案 以下是您可以做的- -查找数字的排列 -找到偶数 -按最大值过

我必须用给定数字的数字找到可能的最大偶数

输入:7876541
期望输出:8776514

谁能帮我解释一下逻辑吗?

这个怎么样

  • 将其转换为字符串
  • 将数字按相反顺序排序
  • 加入它们并将其转换为数字
def n=7876541
def newN=(n.toString().split(“”).findAll{it}.sort().reverse().join())作为整数
普林顿纽恩
你可以在网上快速试用

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

以下是您可以做的-
-查找数字的排列
-找到偶数
-按最大值过滤

已经找到了一个用于查找排列的方法,因此只需稍作修改即可重新使用它。归功于

当然,它可以通过Groovized简化

类置换{
静态定义列表=[]
公共静态void打印置换(char[]a,int startIndex,int endIndex){
if(startIndex==endIndex)

list不需要创建排列。 尝试以下解决方案:

  • 将源编号转换为字符串
  • 将字符串拆分为数组
  • 暂时按升序对数字进行排序
  • 查找第一个偶数数字的索引
  • 从数组中删除此数字(将其存储在变量中)
  • 反转数组并添加删除的数字
  • 将数组中的数字合并,并将其转换为整数
因此,整个脚本如下所示:

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

请发布您现在拥有的代码。
8776514
不正确,因为
8776541
是最好的。@Rao,谢谢您的快速帮助,但在输出中我需要最大的帮助number@RitaR,请检查编辑部分。
“$n”.chars.toList().permutations()*.join()*.toInteger().findAll{it%2==0}.max()
;-)少代码ftw!;-)@RitaR,如果您接受它为@Rao,我不会选择标记为已回答的:(