zoukankan      html  css  js  c++  java
  • 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, m)
    
    	for i := n; i < m; i ++ {
    		if isPrime(i) == true {
    			fmt.Printf("%d
    ", 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 
    ", 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	", (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
     space count:%d
     number count:%d
     others count:%d
    ", 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
    	}
    }
    

      

  • 相关阅读:
    通过注册表找网站绝对路径
    西普学院Crypto之用户名和密码
    西普学院Crypto之一段奇怪的代码
    西普学院Crypto之先有鸡还是先有蛋
    西普学院Crypto之摩擦摩擦
    西普学院Crypto之凯撒是罗马共和国杰出的军事统帅
    各类文件的文件头标志[转]
    收藏的几个脑图
    同源策略详解及绕过[转]
    Python学习#1
  • 原文地址:https://www.cnblogs.com/shhnwangjian/p/7426573.html
Copyright © 2011-2022 走看看