本帖最后由 Jaybor 于 2015-5-24 00:37 编辑
1.遍历出斐波那契数列前100个数
2.任意定义一个数组,用for,while和递归三种方式求和
3.对于任意一个给定数组比如【1,23,56,7】,给出用数组元素能够拼出的最大整数,这里的结果为756231
4.1,2,3,4,5,6,7,8,9这9个数的排列顺序不能动,元素之间可以添加加号或者减号或者什么都不加,但要保证最终的结果为100;
遍历出所有的可能性。
5.编写一个交错排列元素的函数,比如["2","5","7"]和["a","c","e"]得到结果[2,a,5,c,7,e],bingo~
ps:现在上海66期安卓,有问题可以问,不过估计得很晚才能回复~
这里可能大多数童鞋都在第4题卡住了,我从网上拷了答案给大家(解法就是普通的暴力遍历,主要是递归理解起来有点头疼):
对这里的递归可以这样理解:
- public class Demo
- {
- static char operator[] = new char[8];
- static char expre[] = new char[]
- { '1', '+', '2', '+', '3', '+', '4', '+', '5', '+', '6', '+', '7', '+',
- '8', '+', '9' };
-
- public static void main(String[] args)
- {
- fun(0);
- }
-
- public static void fun(int n)
- {
- if (8 == n)
- handle(100);
- else
- {
- /*
- 这里的递归原理是:
- 1.注意观察我标记的断点位置,n从0-7断点以下的程序都是没有机会执行的。
- 2.当n=7的时候程序会从断点开始继续往下运行,然后是n=6(3*3种情况),5(3*3*3种情况),4,3,,,0(3的8次方)
- 3.这个复杂递归的原理在于实现3的8次方种可能性。
- 4.这里用*号代替空,不要以为是错的。。。。
- */
- operator[n] = '+';
- expre[n * 2 + 1] = operator[n];
- fun(n + 1);//-------------断点----------------
- operator[n] = '-';
- expre[n * 2 + 1] = operator[n];
- fun(n + 1);
- operator[n] = '*';
- expre[n * 2 + 1] = operator[n];
- fun(n + 1);
- }
- }
-
- private static void handle(int n)
- {
- StringBuffer sb = new StringBuffer();
- // 将乘法替换成空格
- for (int i = 0; i < expre.length; i++)
- if (expre[i] != '*')
- sb.append(expre[i]);
- String expression = sb.toString();
- // 分割等式, 先根据运算符分割
- String[] num = expression.split("[+-]");
- // 根据数字,分割出其中的运算符
- String[] operator = expression.split("[1-9]");
-
- int sum = Integer.parseInt(num[0]);
-
- for (int i = 0, j = 1; i < operator.length; i++)
- {
- if (operator[i].equals("+"))
- sum += Integer.parseInt(num[j++]);
- if (operator[i].equals("-"))
- sum -= Integer.parseInt(num[j++]);
- }
-
- if (sum == n)
- System.out.println(expression + "=" + n);
- }
-
- }
复制代码 其他题目个人觉得都不难,所以也不想拷代码了;进黑马要学的东西太多,我也没什么时间来论坛了,大家权且拿这些题练练手;
如果有什么入学的问题可以问我,还有你们如果想提交答案啥的可以提交,我如果上论坛了必定会给答题的小伙伴分的哈哈,
毕竟我知道攒黑马币的不易,就这样吧,我得睡了,明天还得上课呢!
|