您的位置:首页 > 编程语言

1小时内必须解决的5个编程问题

2015-08-20 18:33 465 查看
题目的来源:
http://www.codeceo.com/article/5-problems-programmer-1-hour.html


5个问题

问题1

使用for循环、while循环和递归写出3个函数来计算给定数列的总和。

问题2

编写一个交错合并列表元素的函数。例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]。

问题3

编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是0和1,随后的每个数字是前两个数字的和。例如,前10位斐波那契数为:0,1,1,2,3,5,8,13,21,34。

问题4

编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。

问题5

编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。

第四题的第二种方法和第五题是借鉴的.

package SuanFa;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class FiveS {

public static int One1(int[] a) {
int sum = 0;
for (int i = 0; i < a.length; i++)
sum += a[i];
return sum;
}

public static int One2(int[] a) {
int sum = 0;
int b = a.length;
while (b > 0) {
sum += a[b - 1];
b--;
}
return sum;
}

public static int One3(int[] a, int n) {
if (n == 0)
return a
;
else {
return a
+ One3(a, n - 1);

}
}

public static List Hebing(List a, List b) {
List c = new ArrayList();

for (int i = 0; i < (a.size() > b.size() ? a.size() : b.size()); i++) {
if (a.size() > i)
c.add(a.get(i));
if (b.size() > i)
c.add(b.get(i));
}
return c;
}

public static int FeiBo(int i) {
if (i == 1)
return 0;
if (i == 2 || i == 3)
return 1;
else
return FeiBo(i - 1) + FeiBo(i - 2);

}

public static String getMax2() {

Integer[] VALUES = { 50, 2, 100, 99, 5, 7, 51, 50, 11 };
// 多思考关联性
// 比如:我的思考是比较哪个数该放到前面,就是它的最高位数字最大
// 这个题的思路是思考的两个数放到一块,怎么放数字最大.这样所有的数字都两两比较一下,就可以排出序了
Arrays.sort(VALUES, new Comparator<Object>() {
public int compare(Object lhs, Object rhs) {
String v1 = lhs.toString();
String v2 = rhs.toString();
return (v1 + v2).compareTo(v2 + v1) * -1;
// 如果v1+v2>v2+v1则返回正数,否则返回负数
}
});

String result = "";
for (Integer integer : VALUES) {
result += integer.toString();
}

return result;

}

public static int getMax(int[] a) {

List list = new ArrayList();
for (int i = 0; i < a.length; i++) {
list.add(a[i]);
}
int size = list.size();

int sum = 0;
for (int i = 0; i < size; i++) {
int maxnum = 0;
int max = 0;
int maxindex = 0;
int time = 1;
for (int j = 0; j < list.size(); j++) {
int x = Integer.parseInt(list.get(j).toString());
while (x >= 10) {
time++;
x /= 10;
}

// max = max > x ? max : x;
if (max < x) {
maxnum = Integer.parseInt(list.get(j).toString());
max = x;
maxindex = j;
}

}
list.set(maxindex, 0);
int n = 1;
for (int i1 = 0; i1 < time; i1++)
n = n * 10;
sum = sum * n + maxnum;
}

return sum;
}

public static void result() {
int i = 0, qian = 0, hou = 0;// 一个运算符连的2个数分别为qian hou
int ysf = 0;// 运算符
int qh = 0;// 当前是qian还是hou的标记 0为qian 1为hou
int total = 0;// 算式结果
int[] suan = new int[8];// 8个可能的运算符插入位,0表没有,1表加法,2表减法

for (suan[0] = 0; suan[0] < 3; suan[0]++)
// 1 2间的运算符
for (suan[1] = 0; suan[1] < 3; suan[1]++)
// 2 3间的运算符
for (suan[2] = 0; suan[2] < 3; suan[2]++)
// 3 4间的运算符
for (suan[3] = 0; suan[3] < 3; suan[3]++)
// 4 5间的运算符
for (suan[4] = 0; suan[4] < 3; suan[4]++)
// 5 6间的运算符
for (suan[5] = 0; suan[5] < 3; suan[5]++)
// 6 7间的运算符
for (suan[6] = 0; suan[6] < 3; suan[6]++)
// 7 8间的运算符
for (suan[7] = 0; suan[7] < 3; suan[7]++)// 8
// 9间的运算符
{
// 重置
qian = 1;// 第一个数
ysf = 0;
qh = 0;
total = 0;
// 开始运算
for (i = 0; i < 8; i++) {
// 无运算符
if (suan[i] == 0) {
if (qh == 0)
qian = qian * 10 + (i + 2);
else
hou = hou * 10 + (i + 2);
}
// 遇到了新运算符
else {
// 完成前一运算符的计算,结果为qian,依然取hou
if (qh == 1) {
total = qian + ysf * hou;
qian = total;
hou = i + 2;
}
// 开始取hou数
else {
qh = 1;
hou = i + 2;
}
// 更新运算符
if (suan[i] == 1)
ysf = 1;
else
ysf = -1;
}
}
// 完成最后一个运算
total = qian + ysf * hou;
// 输出
if (total == 100) {
for (i = 0; i < 9; i++) {
System.out.print(i + 1);
if (i < 8 && suan[i] == 1)
System.out.print("+");
if (i < 8 && suan[i] == 2)
System.out.print("-");
}
System.out.println("=" + total);
}
}

}

public static void main(String[] args) {
// int[] a = new int[100];
// for (int i = 0; i < 100; i++)
// a[i] = 1;
// System.out.println(One1(a));
// System.out.println(One2(a));
// System.out.println(One3(a, a.length - 1));

// List list = new ArrayList();
// List list2 = new ArrayList();
// list.add("a");
// list.add("b");
// list.add("c");
// list.add("a");
// list.add("b");
// list.add("c");
// list.add("a");
// list.add("b");
// list.add("c");
// list2.add("1");
// list2.add("2");
// list2.add("3");
// list2.add("4");
// list2.add("5");
// List c = Hebing(list, list2);
// System.out.println(c.toString());

// System.out.println(FeiBo(100));

// int[] ii = new int[] { 50, 2, 1, 9 };
// System.out.println(getMax(ii));

result();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 五道