南大高级算法作业之数字重组整除问题

mac2024-08-15  62

input:

3

17

15

16

output:

17

51

Not Possible

  先利用递归求出全排列,然后对全排列进行转为字符串操作,判断是否被17整除以及是否比上一个result值大,最后得到最大的值,有一个细节是每次存放结果时,如果用int类型的result就不可以,可能是每次调用递归都会重新初始化result,想改的话设置为全局变量就行,也没有必要有返回值,反正代码可改进空间很大。

代码:

import java.util.*; public class Main { public static int[] rearrange(String str[],int pos,int result[]){ //arrage finish if(pos == str.length-1){ StringBuffer sb = new StringBuffer(); for(int i = 0; i < str.length;i++){ sb.append(str[i]); } String s = sb.toString(); if(Integer.parseInt(s)%17 == 0 && Integer.parseInt(s) > result[0]){ result[0] = Integer.parseInt(s); } }else{ //include self for(int i=pos;i < str.length;i ++){ //swap String temp = str[pos]; str[pos] = str[i]; str[i] = temp; rearrange(str,pos+1,result); str[i] = str[pos]; str[pos] = temp; } } return result; } public static void main (String[] args){ Scanner scan = new Scanner(System.in); int e_num = Integer.parseInt(scan.nextLine()); while(e_num > 0){ String[] str = scan.nextLine().split(""); int[] result = new int[1]; result[0] = 0; result = rearrange(str,0,result); if(result[0] == 0){ System.out.println("Not Possible"); }else{ System.out.println(result[0]); } e_num --; } } }

 

最新回复(0)