# 优秀的程序员10分钟内能搞定下面5个编程问题，你呢？

（我觉得那些聊起XML、JSON、XSLT、SOAP、HTTP、REST、SSL和200多个首字母缩写词来头头是道，但却不会区分整型和浮点型数据类型的家伙很有意思。呵呵）

### 5个问题

34
......你哪个培训机构教编程基础的老师吗？
17

11
......你哪个培训机构教编程基础的老师吗？
3
# 第5题python解法。
import itertools
inters = [1, 2, 3, 4, 5, 6, 7, 8, 9]
opters = ['+', '-', '']
all_opters = list(itertools.product(opters, repeat=len(inters) - 1)) # 从操作符中取出8个进行排列组合
outers = []
for all_opter in all_opters:
formula = ''.join(str(i) for i in (list(itertools.chain.from_iterable(zip(inters, all_opter))) + [inters[len(inters) - 1]]))
if int(eval(formula)) == 100:
outers.append(formula)
print(outers)
2

#### 引用来自“HandMU”的评论

# 第5题python解法。
import itertools
inters = [1, 2, 3, 4, 5, 6, 7, 8, 9]
opters = ['+', '-', '']
all_opters = list(itertools.product(opters, repeat=len(inters) - 1)) # 从操作符中取出8个进行排列组合
outers = []
for all_opter in all_opters:
formula = ''.join(str(i) for i in (list(itertools.chain.from_iterable(zip(inters, all_opter))) + [inters[len(inters) - 1]]))
if int(eval(formula)) == 100:
outers.append(formula)
print(outers)

1） all_opters 不需要转为 list
2）inters[len(inters) - 1] 直接写 inters[-1] 更简洁

1

0

http://jsbin.com/pisiziriwa/edit?js,console,output
0

0

0
0

#### 引用来自“unrealt84”的评论

public static void main(String[] args) {
int[] input = { 50, 2, 1, 90, 0, 640, 91, 9, 0, 65 };
System.out.println(resolve(input));
}

public static Object resolve(int[] input) {
List<String> list = new ArrayList<>();
for (int val : input) {
}
Collections.sort(list, new Comparator<String>() {

@Override
public int compare(String o1, String o2) {
int len1 = o1.length();
int len2 = o2.length();
int lim = Math.min(len1, len2);
char v1[] = o1.toCharArray();
char v2[] = o2.toCharArray();

int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c2 - c1;
}
k++;
}
return len1 - len2;
}

});
return list.stream().collect(Collectors.joining(""));
}

0

public static void main(String[] args) {
int[] input = { 50, 2, 1, 90, 0, 640, 91, 9, 0, 65 };
System.out.println(resolve(input));
}

public static Object resolve(int[] input) {
List<String> list = new ArrayList<>();
for (int val : input) {
}
Collections.sort(list, new Comparator<String>() {

@Override
public int compare(String o1, String o2) {
int len1 = o1.length();
int len2 = o2.length();
int lim = Math.min(len1, len2);
char v1[] = o1.toCharArray();
char v2[] = o2.toCharArray();

int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c2 - c1;
}
k++;
}
return len1 - len2;
}

});
return list.stream().collect(Collectors.joining(""));
}
0

0

0

#### 引用来自“HandMU”的评论

# 第5题python解法。
import itertools
inters = [1, 2, 3, 4, 5, 6, 7, 8, 9]
opters = ['+', '-', '']
all_opters = list(itertools.product(opters, repeat=len(inters) - 1)) # 从操作符中取出8个进行排列组合
outers = []
for all_opter in all_opters:
formula = ''.join(str(i) for i in (list(itertools.chain.from_iterable(zip(inters, all_opter))) + [inters[len(inters) - 1]]))
if int(eval(formula)) == 100:
outers.append(formula)
print(outers)

#### 引用来自“滑车”的评论

1） all_opters 不需要转为 list
2）inters[len(inters) - 1] 直接写 inters[-1] 更简洁

0

0

0

0

#### 引用来自“水涵”的评论

100项的那个数，你们可以查一下多少位。在自己没有写过高精度算法的情况下，1小时能写完都算厉害了。当年acm的题
python表示内存管够的话，多少位都不是问题
2

#### 引用来自“HandMU”的评论

# 第5题python解法。
import itertools
inters = [1, 2, 3, 4, 5, 6, 7, 8, 9]
opters = ['+', '-', '']
all_opters = list(itertools.product(opters, repeat=len(inters) - 1)) # 从操作符中取出8个进行排列组合
outers = []
for all_opter in all_opters:
formula = ''.join(str(i) for i in (list(itertools.chain.from_iterable(zip(inters, all_opter))) + [inters[len(inters) - 1]]))
if int(eval(formula)) == 100:
outers.append(formula)
print(outers)

1） all_opters 不需要转为 list
2）inters[len(inters) - 1] 直接写 inters[-1] 更简洁
0

0

CmRlZiBzdHJfaXRlcih0cmd0LCBkZ3QsIHN5bWJsLCBmcm1sPScnLCBwcm10PUZhbHNlKToKICAgIGlmIG5vdCBkZ3Q6CiAgICAgICAgaWYgdHJndCA9PSBldmFsKGZybWwpOgogICAgICAgICAgICBwcmludChmcm1sKQogICAgZWxzZToKICAgICAgICBpZiBwcm10OgogICAgICAgICAgICBmb3IgcyBpbiBzeW1ibDoKICAgICAgICAgICAgICAgIHN0cl9pdGVyKHRyZ3QsIGRndCwgc3ltYmwsIGZybWwgKyBzKQogICAgICAgIHN0cl9pdGVyKHRyZ3QsIGRndFsxOl0sIHN5bWJsLCBmcm1sICsgZGd0WzBdLCBUcnVlKQoKc3RyX2l0ZXIoMTAwLCAnMTIzNDU2Nzg5JywgJy0rJykK
0

#### 引用来自“Rezeroer”的评论

function q5(n,str){
if(n == 10 && eval(str) == 100){
log(str)
}else if(n==10){
void null
}else{
q5(n+1,str+n)
if(str == ''){
q5(n+1,str+n)
}else{
q5(n+1,str+'+'+n)
q5(n+1,str+'-'+n)
}
}
}

q5(1,'')

"123+45-67+8-9"
"123+4-5+67-89"
"123-45-67+89"
"123-4-5-6-7+8-9"
"12+3+4+5-6-7+89"
"12+3-4+5+67+8+9"
"12-3-4+5-6+7+89"
"1+23-4+56+7+8+9"
"1+23-4+5+6+78-9"
"1+2+34-5+67-8+9"
"1+2+3-4+5+6+78+9"
"123+45-67+8-9"
"123+4-5+67-89"
"123-45-67+89"
"123-4-5-6-7+8-9"
"12+3+4+5-6-7+89"
"12+3-4+5+67+8+9"
"12-3-4+5-6+7+89"
"1+23-4+56+7+8+9"
"1+23-4+5+6+78-9"
"1+2+34-5+67-8+9"
"1+2+3-4+5+6+78+9"

0

0

#### 引用来自“jarchan”的评论

for (i=0; i<256; i++) {
// i转换成二进制表示
// 获得每个1的位置（1代表+）
// 获得每个0的位置（0代表-）
// 做加减计算判断是否等于100
}