parent
7c0447f70f
commit
687db3d3a4
@ -1 +1,71 @@ |
|||||||
package cap3 |
package cap3 |
||||||
|
|
||||||
|
import "fmt" |
||||||
|
|
||||||
|
const ( |
||||||
|
_opAdd = '+' // 加
|
||||||
|
_opMinus = '-' // 减
|
||||||
|
_opMulti = '*' // 乘
|
||||||
|
_opDiv = '/' // 除
|
||||||
|
) |
||||||
|
|
||||||
|
var allOperations = [4]byte{_opAdd, _opMinus, _opMulti, _opDiv} |
||||||
|
|
||||||
|
func Ex34(x1, x2, x3, x4, x5, y int) []string { |
||||||
|
result := make([]string, 0) |
||||||
|
operations := make([]byte, 4) |
||||||
|
nums := [5]int{x1, x2, x3, x4, x5} |
||||||
|
|
||||||
|
// 一层一层尝试运算符
|
||||||
|
for _, operations[0] = range allOperations { |
||||||
|
// 当前为除法,判断下一个数是否为0,如果是则直接跳过,下同
|
||||||
|
if operations[0] == _opDiv && nums[1] == 0 { |
||||||
|
continue |
||||||
|
} |
||||||
|
for _, operations[1] = range allOperations { |
||||||
|
if operations[1] == _opDiv && nums[2] == 0 { |
||||||
|
continue |
||||||
|
} |
||||||
|
for _, operations[2] = range allOperations { |
||||||
|
if operations[2] == _opDiv && nums[3] == 0 { |
||||||
|
continue |
||||||
|
} |
||||||
|
for _, operations[4] = range allOperations { |
||||||
|
if operations[4] == _opDiv && nums[4] == 0 { |
||||||
|
continue |
||||||
|
} |
||||||
|
|
||||||
|
// 计算表达式
|
||||||
|
p, f, q := 0, 1, nums[1] |
||||||
|
for i, op := range operations { |
||||||
|
switch op { |
||||||
|
case _opAdd: |
||||||
|
p += f * q |
||||||
|
f, q = 1, nums[i+1] |
||||||
|
case _opMinus: |
||||||
|
p += f * q |
||||||
|
f, q = -1, nums[i+1] |
||||||
|
case _opMulti: |
||||||
|
q *= nums[i+1] |
||||||
|
case _opDiv: |
||||||
|
q /= nums[i+1] |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 结果等于给定的数字y,添加到结果集中
|
||||||
|
if p+f*q == y { |
||||||
|
text := "" |
||||||
|
for _, num := range nums { |
||||||
|
text += fmt.Sprintf("%d %c ", num, operations) |
||||||
|
} |
||||||
|
|
||||||
|
text += fmt.Sprintf("%d = %d\n", nums[4], y) |
||||||
|
result = append(result, text) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return result |
||||||
|
} |
||||||
|
@ -1 +1,24 @@ |
|||||||
package cap3 |
package cap3 |
||||||
|
|
||||||
|
func Ex35(boxNum int, expectWeigh, actualWeigh int) []int { |
||||||
|
result := make([]int, 0) |
||||||
|
|
||||||
|
// 实际值重量正常重量差 / 10
|
||||||
|
w := (expectWeigh - actualWeigh) / 10 |
||||||
|
// w转化为2的幂的和
|
||||||
|
for w != 0 { |
||||||
|
// k是箱子编号,从0开始, t是2的幂
|
||||||
|
k, t := 0, 1 |
||||||
|
// 找到最接近w的2的k次方t,当t大于w时结束小循环
|
||||||
|
for w-t >= 0 { |
||||||
|
t *= 2 |
||||||
|
// t是2的k次方
|
||||||
|
k++ |
||||||
|
} |
||||||
|
|
||||||
|
result = append(result, k-1) |
||||||
|
w -= t / 2 |
||||||
|
} |
||||||
|
|
||||||
|
return result |
||||||
|
} |
||||||
|
@ -1 +1,20 @@ |
|||||||
package cap3 |
package cap3 |
||||||
|
|
||||||
|
func Ex36(num int) []int { |
||||||
|
// 用另外一种写法,直接存能整除的数
|
||||||
|
divNums := make([]int, 0) |
||||||
|
|
||||||
|
if num%3 == 0 { |
||||||
|
divNums = append(divNums, 3) |
||||||
|
} |
||||||
|
|
||||||
|
if num%5 == 0 { |
||||||
|
divNums = append(divNums, 5) |
||||||
|
} |
||||||
|
|
||||||
|
if num%7 == 0 { |
||||||
|
divNums = append(divNums, 7) |
||||||
|
} |
||||||
|
|
||||||
|
return divNums |
||||||
|
} |
||||||
|
@ -1 +1,24 @@ |
|||||||
package cap3 |
package cap3 |
||||||
|
|
||||||
|
func Ex37(n int) []int { |
||||||
|
var coeff func(nums []int, n int) |
||||||
|
coeff = func(nums []int, n int) { |
||||||
|
if n <= 0 { |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
// 第一个和最后一个数字肯定是1
|
||||||
|
nums[0] = 1 |
||||||
|
coeff(nums, n-1) |
||||||
|
nums[n] = 1 |
||||||
|
|
||||||
|
for i := n - 1; i > 0; i-- { |
||||||
|
nums[i] += nums[i-1] |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
nums := make([]int, n+1) |
||||||
|
coeff(nums, n) |
||||||
|
|
||||||
|
return nums |
||||||
|
} |
||||||
|
@ -1 +1,33 @@ |
|||||||
package cap3 |
package cap3 |
||||||
|
|
||||||
|
func Ex38(k int, nums []int) { |
||||||
|
gcd := func(m, n int) int { |
||||||
|
a, b := m, n |
||||||
|
if m < n { |
||||||
|
a, b = n, m |
||||||
|
} |
||||||
|
|
||||||
|
r := a % b |
||||||
|
for r != 0 { |
||||||
|
a = b |
||||||
|
b = r |
||||||
|
r = a % b |
||||||
|
} |
||||||
|
|
||||||
|
return b |
||||||
|
} |
||||||
|
|
||||||
|
numsLen := len(nums) |
||||||
|
first, gcdNumb := 0, gcd(numsLen, k) |
||||||
|
for i := 0; i < gcdNumb; i++ { |
||||||
|
first = nums[i] |
||||||
|
startIdx := i |
||||||
|
for j := 0; j < numsLen/gcdNumb; j++ { |
||||||
|
startIdx = (startIdx + k) % numsLen |
||||||
|
// 交换
|
||||||
|
tmp := nums[startIdx] |
||||||
|
nums[startIdx] = first |
||||||
|
first = tmp |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
@ -1 +1,10 @@ |
|||||||
package cap3 |
package cap3 |
||||||
|
|
||||||
|
func Ex39(a, b, c int) int { |
||||||
|
result := 70*a + 21*b + 15*c |
||||||
|
for result > 105 { |
||||||
|
result -= 105 |
||||||
|
} |
||||||
|
|
||||||
|
return result |
||||||
|
} |
||||||
|
@ -1 +1,18 @@ |
|||||||
package cap3 |
package cap3 |
||||||
|
|
||||||
|
func Ex40(n int) int { |
||||||
|
var fab func(n int) int |
||||||
|
fab = func(n int) int { |
||||||
|
if n == 1 { |
||||||
|
return 1 |
||||||
|
} |
||||||
|
|
||||||
|
if n == 2 { |
||||||
|
return 2 |
||||||
|
} |
||||||
|
|
||||||
|
return fab(n-1) + fab(n-2) |
||||||
|
} |
||||||
|
|
||||||
|
return fab(n) |
||||||
|
} |
||||||
|
@ -1 +1,16 @@ |
|||||||
package cap3 |
package cap3 |
||||||
|
|
||||||
|
import "math" |
||||||
|
|
||||||
|
func Ex41(t int) (float64, float64) { |
||||||
|
a, b := math.Pow(3, float64(t))/4, math.Pow(3, float64(t+1))/4 |
||||||
|
if t%2 == 0 { |
||||||
|
a -= 0.75 |
||||||
|
b += 0.75 |
||||||
|
} else { |
||||||
|
a += 0.75 |
||||||
|
b -= 0.75 |
||||||
|
} |
||||||
|
|
||||||
|
return a, b |
||||||
|
} |
||||||
|
Loading…
Reference in new issue