连接时的长度L,当N (1 ≦ N ≦ 5000) 的棒材长度由标准输入提供时,是将N 根棒材中的三个长度连接起来的L 请编写程序求的组合总数。但是,和单个条的长度一样,被拼凑起来的长度(L)是一个正整数,在32bit整数范围内是足够处理的。此外,它还具有所有长度不同的棒材。
例如)输入:
15
5
8
4
10
3
2
输出:
2 //{{2, 3, 10}, {3, 4, 8}}
示例 2) 输入:
35
10
13
12
17
10
4
18
3
11
5
7
输出:
6 //{{4, 13, 18}, {5, 12, 18}, {5, 13, 17}, {7, 10, 18}, {7, 11, 17}, {10, 12, 13}}
我的答案就在这里
package main
import (
"fmt"
"sort"
)
func main() {
input_count := 0
var target int
var count int
var v int
var array []int
for read_count, _ := fmt.Scan(&v); read_count != 0; read_count, _ = fmt.Scan(&v) {
if 0 == input_count {
target = v
} else if 1 == input_count {
count = v
array = make([]int, count)
} else {
array[input_count-2] = v
}
input_count++
}
sort.Ints(array)
fmt.Println(Calculate(target, count, array))
}
func Except(pair []int, count int, array []int) []int {
except := make([]int, count-pair[2])
except_index := 0
on := false
for _, v := range array {
if on {
except[except_index] = v
except_index++
}
if v == pair[1] {
on = true
}
}
return except
}
func ListUp(target int, count int, array []int) [][]int {
max := array[count-1]
list := make([][]int, Fact(count-1))
list_index := 0
for i, h := range array {
if count > i+1 && target > h+array[i+1] {
for j, v := range array[i+1:] {
if count > i+j+1 && target <= max+h+v && target > h+v {
list[list_index] = []int{h, v, i + j + 1}
list_index++
}
}
}
}
return list
}
相关分类