经典面试题系列(Golang)-- 查询特殊数字【leetcode改编】

特殊数字”是指只能被分解为2,3,7的乘积的数字。“特殊数字”序列为1, 2, 3, 4, 6, 7, 8, 9, 12, 14, ...展示了前10个“特殊数字”。按照惯例,1也是“特殊数字”。给定整数n,写一个程序,找到序列中,第n个“特殊数字”。如:n=9,找到“特殊数字”序列中第9位数字,也就是输出12

输入:

  每一行包含一个正整数,n (n <= 1500)。如果输入的一行为0,则输入终止。

输出:

  对于每一行输入,输出“特殊数字”。注意不要解析输入为0的行

输入:

  1

  2

  9

  0

输出:

  1

  2

  12

解决思路:首先通过枚举,找到一个区间的所有符合题目规则的数,然后将其排序,最后从这个排序列表里取出即可。在这里,基于golang实现,定义一个全局切片,保存符合题目规则的数,

然后排序。

代码:

package main

import (
	"fmt"
	"math"
	"sort"
)

var utilSlice = make([]int, 1)

func Init() []int {

	for i := 0; i < 30; i++ {
		for j := 0; j < 20; j++ {
			for k := 0; k < 10; k++ {
				cur := math.Pow(2, float64(i)) * math.Pow(3, float64(j)) * math.Pow(7, float64(k))

				utilSlice = append(utilSlice, int(cur))
			}
		}
	}
	sort.Ints(utilSlice)
	return utilSlice
}

func main() {
	var input int
	Init()
	//fmt.Println(utilSlice)
	for {
		fmt.Scanln(&input)
		if input == 0 {
			break
		}
		fmt.Println("对应的数字为:",utilSlice[input])
	}

}

posted @ 2023-05-12 15:21  99号的格调  阅读(27)  评论(0编辑  收藏  举报