go 练习
1、判断 101-200 之间有多少个素数,并输出所有素数
定义:为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。
package main import (
"fmt"
"math"
) func isPrime(n int) bool{
/*
判断 101-200 之间有多少个素数,并输出所有素数
定义:为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数
*/
for i := 2; i < int(math.Sqrt(float64(n))); i ++ {
if n%i == 0 {
return false
}
}
return true
} func main(){
var n int
var m int
fmt.Scanf("%d%d", &n, &m)
/*
var n int是声明,但是没有赋值,它作用于main函数中
n是值,&n是n的地址,
Scanf是一个函数,如果传入的是n,它是将n拷贝一份,传入Scanf进行处理,没有将main中的n赋值成功,只是改变了赋值后的n
传入&n地址,它指向n的存储地址,通过Scanf处理,可以真正改变n的值
*/
fmt.Printf("%d %d\n", n, m) for i := n; i < m; i ++ {
if isPrime(i) == true {
fmt.Printf("%d\n", i)
continue
}
}
}
2、打印出100-999中所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153 是一个“水仙花数”,因为 153=1 的三次方+5 的三次方+3 的三次方。
package main
import "fmt"
func isSXH(n int) bool{
/*
打印出100-999中所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字
立方和等于该数本身。例如:153 是一个“水仙花数”,因为 153=1 的三次
方+5 的三次方+3 的三次方。
*/
var i, j, k int
i = n % 10
j = (n / 10) % 10
k = (n / 100) % 10
sum := i*i*i + j*j*j + k*k*k
return sum == n
}
func main(){
var n int
var m int
fmt.Scanf("%d,%d", &n, &m) // 输入中间为逗号
for i := n; i < m; i++ {
if isSXH(i) == true{
fmt.Println(i, "is 水仙花")
}
}
}
3、对于一个数n,求n的阶乘之和,即: 1! + 2! + 3!+…n!
package main
import "fmt"
func sum (n int) uint64{
/*
对于一个数n,求n的阶乘之和,即: 1! + 2! + 3!+…n!
*/
var s uint64 = 1
var sum uint64 = 0
for i := 1; i <= n; i++ {
s = s * uint64(i)
fmt.Printf("%d!=%v \n", i, s)
sum += s
}
return sum
}
func main() {
var n int
fmt.Scanf("%d", &n)
s := sum(n)
fmt.Println(s)
}
4、编写程序,在终端输出九九乘法表。
package main
import "fmt"
func multi() {
for i := 0; i < 9; i++ {
for j := 0; j <= i; j++ {
fmt.Printf("%d*%d=%d\t", (i+1), j+1, (i+1)*(j+1))
}
fmt.Println()
}
}
func main() {
/*
编写程序,在终端输出九九乘法表。
*/
multi()
}
5、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3
package main
import "fmt"
func perfect(n int) bool {
var sum int = 0
for i := 1; i < n; i++ {
if n%i == 0 {
sum += i
}
}
return n == sum
}
func process(n int) {
for i := 1; i < n+1; i++ {
if perfect(i) {
fmt.Println(i)
}
}
}
func main() {
/*
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3. 编程找出1000以内的所有完数
*/
var n int
fmt.Scanf("%d", &n)
process(n)
}
6、输入一个字符串,判断其是否为回文。回文字符串是指从左到右读和从右到左读完全相同的字符串。
package main
import "fmt"
func process(str string) bool {
t := []rune(str)
length := len(t)
for i, _ := range t {
if i == length/2 {
break
}
last := length - i - 1
if t[i] != t[last] {
return false
}
}
return true
}
func main() {
/*
输入一个字符串,判断其是否为回文。回文字符串是指从左到右读和从右到左读完全相同的字符串
*/
var str string
fmt.Scanf("%s", &str)
if process(str) {
fmt.Println("yes")
} else {
fmt.Println("no")
}
}
7、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
package main import (
"bufio"
"fmt"
"os"
) func count(str string) (worldCount, spaceCount, numberCount, otherCount int) {
t := []rune(str)
for _, v := range t {
switch {
case v >= 'a' && v <= 'z':
fallthrough
case v >= 'A' && v <= 'Z':
worldCount++
case v == ' ':
spaceCount++
case v >= '0' && v <= '9':
numberCount++
default:
otherCount++
}
} return
} func main() {
/*
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
*/
reader := bufio.NewReader(os.Stdin)
result, _, err := reader.ReadLine()
if err != nil {
fmt.Println("read from console err:", err)
return
}
wc, sc, nc, oc := count(string(result))
fmt.Printf("wolrd count:%d\n space count:%d\n number count:%d\n others count:%d\n", wc, sc, nc, oc)
}
8、计算两个大数相加的和,这两个大数会超过int64的表示范围
package main import (
"bufio"
"fmt"
"os"
"strings"
) func multi(str1, str2 string) (result string) { if len(str1) == 0 && len(str2) == 0 {
result = "0"
return
} var index1 = len(str1) - 1
var index2 = len(str2) - 1
var left int for index1 >= 0 && index2 >= 0 {
c1 := str1[index1] - '0'
c2 := str2[index2] - '0' sum := int(c1) + int(c2) + left
if sum >= 10 {
left = 1
} else {
left = 0
}
c3 := (sum % 10) + '0'
result = fmt.Sprintf("%c%s", c3, result)
index1--
index2--
} for index1 >= 0 {
c1 := str1[index1] - '0'
sum := int(c1) + left
if sum >= 10 {
left = 1
} else {
left = 0
}
c3 := (sum % 10) + '0' result = fmt.Sprintf("%c%s", c3, result)
index1--
} for index2 >= 0 {
c1 := str2[index2] - '0'
sum := int(c1) + left
if sum >= 10 {
left = 1
} else {
left = 0
}
c3 := (sum % 10) + '0'
result = fmt.Sprintf("%c%s", c3, result)
index2--
} if left == 1 {
result = fmt.Sprintf("1%s", result)
}
return
} func main() {
/*
计算两个大数相加的和,这两个大数会超过int64的表示范围
*/
reader := bufio.NewReader(os.Stdin)
result, _, err := reader.ReadLine()
if err != nil {
fmt.Println("read from console err:", err)
return
} strSlice := strings.Split(string(result), "+")
if len(strSlice) != 2 {
fmt.Println("please input a+b")
return
} strNumber1 := strings.TrimSpace(strSlice[0])
strNumber2 := strings.TrimSpace(strSlice[1])
fmt.Println(multi(strNumber1, strNumber2))
}
9、冒泡排序
package main
import "fmt"
func bsort(a []int) {
for i := 0; i < len(a); i++ {
for j := 1; j < len(a)-i; j++ {
if a[j] < a[j-1] {
a[j], a[j-1] = a[j-1], a[j]
}
}
}
}
func main() {
b := [...]int{8, 7, 5, 4, 3, 10, 15}
bsort(b[:])
fmt.Println(b)
}
10、插入排序
package main
import "fmt"
func isort(a []int) {
for i := 1; i < len(a); i++ {
for j := i; j > 0; j-- {
if a[j] > a[j-1] {
break
}
a[j], a[j-1] = a[j-1], a[j]
}
}
}
func main() {
b := [...]int{8, 7, 5, 4, 3, 10, 15}
isort(b[:])
fmt.Println(b)
}
11、选择排序
package main
import "fmt"
func ssort(a []int) {
for i := 0; i < len(a); i++ {
var min int = i
for j := i + 1; j < len(a); j++ {
if a[min] > a[j] {
min = j
}
}
a[i], a[min] = a[min], a[i]
}
}
func main() {
b := [...]int{8, 7, 5, 4, 3, 10, 15}
ssort(b[:])
fmt.Println(b)
}
12、快速排序
package main
import "fmt"
func qsort(a []int, left, right int) {
if left >= right {
return
}
val := a[left]
k := left
//确定val所在的位置
for i := left + 1; i <= right; i++ {
if a[i] < val {
a[k] = a[i]
a[i] = a[k+1]
k++
}
}
a[k] = val
qsort(a, left, k-1)
qsort(a, k+1, right)
}
func main() {
b := [...]int{8, 7, 5, 4, 3, 10, 15}
qsort(b[:], 0, len(b)-1)
fmt.Println(b)
}
13、二分查找
package main
import "fmt"
func BinarySearch(sortedArray []int, lookingFor int) int {
low := 0
height := len(sortedArray) - 1
for low <= height {
mid := low + (height-low)/2
midValue := sortedArray[mid]
if midValue == lookingFor {
return mid
} else if midValue > lookingFor {
height = mid - 1
} else if midValue < lookingFor {
low = mid + 1
}
}
return -1
}
func main() {
fmt.Println(BinarySearch([]int{1, 2, 3, 5, 7, 8, 10, 234, 755}, 10))
}
13、斐波那契
package main
import "fmt"
func main() {
n := 12
i := Fibonq1(n)
j := Fibonq2(n)
k := Fibonq3(n)
fmt.Printf("%v %v %v", i, j, k)
}
//递归实现
func Fibonq1(n int) int {
if n == 0 {
return 0
} else if n == 1 {
return 1
} else if n > 1 {
return Fibonq1(n-1) + Fibonq1(n-2)
} else {
return -1
}
}
//迭代实现
func Fibonq2(n int) int {
if n < 0 {
return -1
} else if n == 0 {
return 0
} else if n <= 2 {
return 1
} else {
a, b := 1, 1
result := 0
for i := 3; i <= n; i++ {
result = a + b
a, b = b, result
}
return result
}
}
//利用闭包
func Fibonq3(n int) int {
if n < 0 {
return -1
} else {
f := Fibonacci()
result := 0
for i := 0; i < n; i++ {
result = f()
}
return result
}
}
func Fibonacci() func() int {
a, b := 0, 1
return func() int {
a, b = b, a+b
return a
}
}
随机推荐
- <<梦断代码>>阅读笔记一
没有想象中的枯燥,甚至有些有趣.这就是我对<梦断代码>这一本书的第一印象.而且,作为一本面向程序员的书籍,作者很有意义地从第0章开始,那我也从第0章开始说.这第一次读书笔记是针对0~2 章 ...
- java 五子棋游戏
五子棋游戏 一,1.五子棋的基本常识 与任何一种竞技棋一样,五子棋的每一局棋也分为三个阶段:开局,中局和残局. 五子棋的开始阶段称为开局,或称布局.其开局阶段是十分短暂的,大约在七着与十几着之间.在这 ...
- SPRINT四则运算(第二天)
1.小组成员: 李豌湄:master 江丹仪:产品负责人 2.现状: a.已经下载APP分析他们的界面.优缺点和闪光点 b.已改进代码添加功能 3.任务认领: 完成任务的第一个模块: a.下载五个类 ...
- JavaScript 编程易错点整理
Case 1: 通过getElementById("id")获得是一个DOM元素节点对象: 通过getElementsByTagName("tagName")获 ...
- 周刷题第一期总结(two sum and two numbers)
由于深深的知道自己是事件驱动型的人,一直想补强自己的薄弱环节算法,却完全不知道从哪里入手.所以只能采用最笨的办法,刷题.从刷题中遇到问题就解决问题,最后可能多多少少也能提高一下自己的渣算法吧. 暂时的 ...
- indicator function指示函数
指示函数 在集合论中,指示函数是定义在某集合X上的函数,表示其中有哪些元素属于某一子集A. 中文名 指示函数 外文名 indicator function 相关学科 数学.组合数学 其他称呼 特征 ...
- Luogu2264 树上游戏(点分治)
要统计所有路径的信息,那我们考虑点分治,每次算经过分治中心的路径的贡献.然而路径的颜色数量实在是不好统计,既然只需要求从每个点出发的所有路径的颜色数量之和,那换一种思路,改为求从每个点出发包含某种颜色 ...
- share.js轻松分享/邀请
GitHub地址 https://github.com/overtrue/share.js 安装 安装的方法很多,大家选择自己合适的进行安装就好. clone $ git clone https:// ...
- Codeforces Round #436 (Div. 2) A,B,D
A. Fair Game 题目链接:http://codeforces.com/contest/864/problem/A 水题 #include<iostream> #include&l ...
- java强引用,软引用,弱引用,虚引用
java强引用,软引用,弱引用,虚引用 原文:https://blog.csdn.net/liaodehong/article/details/52223354 用了Java怎么长时间一直不知道原来J ...