今天在iPad上下了个小游戏,主要是一个计算器的界面,有开始值,目标值,限定步数,以及一些加减乘除,还有作者脑洞想出来的功能键,主要有左移,直接把一个数加到末尾,将其中的某个数改为另一个数等等。。玩到20几关的时候感觉每道题要想一会儿才能解出来,于是有了下面的程序,写完程序就不想玩了。
游戏界面如下,就像一个真的计算器。其中紫色的2、5分别表示在当前数字最后插入2、5,+5和-5就是加减,初始值是0,限定5步,得到目标值210,想想该怎么 *** 作?是不是不是太容易一眼看出来?这就对了,这么容易让你看出来作者怎么赚钱?
答案是:SET 2==>2,SET 5==>25,SUB 5 ==> 20,SET 5 ==>205,ADD 5 ==> 210
代码如下,用回溯的思想,DFS实现的。
package com;import com.Google.common.collect.@R_404_6818@s;import java.util.arraydeque;import java.util.Deque;import java.util.@R_404_6818@;/** * 2018-08-24 下午10:36. * * @Author yangliqun */public class Calc { public static voID main(String[] args) { int n = 5; int start = 0; int target = 210; @R_404_6818@<Num> @R_404_6818@ = @R_404_6818@s.newArray@R_404_6818@(); @R_404_6818@.add(new Num(OpType.SET,2)); @R_404_6818@.add(new Num(OpType.SET,5));// @R_404_6818@.add(new Num(OpType.left_SHIFT,0)); @R_404_6818@.add(new Num(OpType.ADD,5)); @R_404_6818@.add(new Num(OpType.SUB,5));// @R_404_6818@.add(new Num(OpType.SET,0));// @R_404_6818@.add(new Num(OpType.SET,5)); dfs(@R_404_6818@,new arraydeque<>(),n,start,target); } static voID dfs(@R_404_6818@<Num> @R_404_6818@,Deque<Num> res,int step,int last,int target) { if (@R_404_6818@ == null || @R_404_6818@.size() == 0 || step <= 0) { return; } for (int i = 0; i < @R_404_6818@.size(); i++) { Num num = @R_404_6818@.get(i); int tmp = num.calc(last); if (tmp == 0xdeadbeef) { continue; } res.offer(num); if (tmp == target) { System.out.println(res); } else { dfs(@R_404_6818@,res,step - 1,tmp,target); } res.pollLast(); } } static class Num { OpType opType; int num; protected Num(OpType opType,int num) { this.opType = opType; this.num = num; } public int calc(int last) { if (this.opType == OpType.SET) { if (last == 0) { return this.num; } else { return last * (int)Math.pow(10,this.num / 10 + 1) + this.num; } } if (this.opType == OpType.left_SHIFT) { return last / 10; } if (this.opType == OpType.ADD) { return this.num + last; } if (this.opType == OpType.SUB) { return last - this.num; } if (this.opType == OpType.Mul) { return last * this.num; } else { if (last % this.num == 0) { return last / this.num; } else { return 0xdeadbeef; } } } @OverrIDe public String toString() { return "Num{" + "opType=" + opType + ",num=" + num + ‘}‘; } } enum OpType { SET,ADD,SUB,Mul,div,left_SHIFT; }}
上面那道题代码输出就是:
[Num{opType=SET,num=2},Num{opType=SET,num=5},Num{opType=SUB,Num{opType=ADD,num=5}]
根据输出 *** 作即可。
目前定义了几个基本 *** 作,当然估计这游戏后面估计还有其他的神奇 *** 作,我没有继续往后玩了就写到这里了。
总结以上是内存溢出为你收集整理的iPad游戏 Calcculator: The Game 程序自动计算求解方法全部内容,希望文章能够帮你解决iPad游戏 Calcculator: The Game 程序自动计算求解方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)