题解 | #24点游戏算法#

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

把握住几个点:

1、 每一个数字只能被用一次;2、除法可能存在不能整除的情况,所以要做取余计算,只有能整除的才能继续,否则结果可能不准;3、题目中数字总共只有4个,每一个的范围为1<=n<=10,故可不考虑被除数为0的情况,只要输入的时候加了判断即可。

public class Main {    
  public static void main(String[] args) {        
	Scanner in = new Scanner(System.in);        
	while (in.hasNext()) {           
	  // 输入4个参数          
	  int[] iptNums = new int[4];            
	  for (int i = 0; i < 4; i++) {             
		iptNums[i] = in.nextInt();          
	  }            
	  int[] visit = new int[4];           
	  System.out.println(dfs(0, iptNums, visit, 0));        
	}   
  }   
  private static boolean dfs(int index, int[] iptNums, int[] visit, int result) {       
	if (index == 4) {        
	  if (result == 24) {                
		return true;           
	  }          
	  return false;        
	}       
	for (int i = 0; i < 4; i++) {      
	  if (visit[i] == 0) {             
		visit[i] = 1;              
		if (dfs( index + 1, iptNums, visit,result + iptNums[i])                    
			|| dfs( index + 1, iptNums, visit,result - iptNums[i])                
			|| dfs( index + 1, iptNums, visit,result * iptNums[i])         
			|| (result % iptNums[i] == 0 && dfs( index + 1, iptNums, visit,result / iptNums[i]))) {                   
		  return true;              
		}                
		visit[i] = 0;        
	  }       
	}       
	return false;   
  }
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务