这是我参与8月更文挑战的第 25 天,活动详情查看: 8月更文挑战
L1-005 考试座位号 (15 分) Go语言|Golang
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
输入样例:
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
结尾无空行
输出样例:
3310120150912002 2
3310120150912119 1
结尾无空行
思路:
基础的循环语句。 注意:
for循环的两种形式
for index,item := range info{}
for i:=0; i<M; i++{}
- 因为要存储的数字太大了,怕数组会存不下,所以用字符串数组存,所以会用到一个类型的转换来进行下一步的判断操作。
string转int
strconv.Itoa(s)//int to string
strconv.Atoi(s)//string to int
代码如下:
package main
import (
"fmt"
"strconv"
)
func main() {
var F int
var M int
_,_ = fmt.Scan(&F)
var info [1001][3]string
for i:=0;i<F;i++{
_,_ = fmt.Scan(&info[i][0],&info[i][1],&info[i][2])
}
_,_ = fmt.Scan(&M)
for i:=0; i<M; i++{
var s int
_,_=fmt.Scan(&s)
for _,item := range info{
if item[1] == strconv.Itoa(s) {
fmt.Printf("%s %s\n",item[0],item[2])
}
}
}
}
L1-006 连续因子 (20 分) Go语言|Golang
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<2e31)
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
结尾无空行
输出样例:
3
5*6*7
结尾无空行
思路:
因为是连续的,所以我们只需找到第一个数字就行了,不过要记录一下一共有多少个这样的连续数字。最后连环输出就可以了。
但是!!!我只拿了18分。。。呜呜呜。。希望能有大佬帮我看看为啥我第四个测试点过不了。。
代码如下:
package main
import (
"fmt"
"math"
)
func main() {
var N int
var tmp int
length := 0
first := 0
_,_ = fmt.Scan(&N)
for i := 2; i <= int(math.Sqrt(float64(N)))+1; i++ { // 使用开方,减少循环次数,注意类型的
var j int
tmp = 1
for j=i ; j<=int(math.Sqrt(float64(N)))+1; j++ { // 使用开方,减少循环次数,注意类型的
tmp *= j
if N % tmp!=0 {
break
}
if j-i>length {
length = j-i
first = i
}
}
}
if first == 0 { //特殊情况的考虑
fmt.Printf("1\n%d",N)
}else{
fmt.Printf("%d",length +1)
fmt.Printf("\n%d",first)
for i := 1;i<=length ; i++ {
fmt.Printf("*%d",first+i)
}
}
}