代码之家  ›  专栏  ›  技术社区  ›  Rita R

使用给定数字查找偶数

  •  -1
  • Rita R  · 技术社区  · 7 年前

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

    输入: 7876541
    所需输出: 8776514

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   Rao CrashOverload    7 年前

    这个怎么样?

    • 将其转换为字符串
    • 将数字按相反顺序排序
    • 加入他们并将其转换为数字
    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

        2
  •  0
  •   Valdi_Bo    7 年前

    不需要创建置换。 尝试此解决方案:

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

    整个脚本如下所示:

    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