go语言 一种方形数字排序

package main

import "fmt"

func SortEven(n int){

    for i := 1; i < n+1; i++ {

        for j := 1; j < n+1; j++ {

            switch {

            case i+j<=n &&i<=j:

                fmt.Printf("%d ",GS1(i,j,n))

            case i+j>=n+2 && i>=j:

                fmt.Printf("%d ",GS2(i,j,n))

            case i+j<n+2 && j<=n/2:

                fmt.Printf("%d ",GS3(i,j,n))

            default:

                fmt.Printf("%d ",GS4(i,j,n))

            }      

        }

        fmt.Println()   

    }

}

func SortOdd(n int){

    for i := 1 ;  i < n+1 ;  i++ {

        for j := 1 ;  j < n+1 ;  j++ {

            switch {

            case j>=i&& i<(n+1)/2&&i+j<=n+1:

                fmt.Printf("%d ",GS1(i,j,n))

            case i+j<=n && j<(n+1)/2:

                fmt.Printf("%d ",GS3(i,j,n))

            case i==j && i==(n+1)/2:

                fmt.Printf("%d ",GS5(i,j,n))

            case i+j>=n+2 &&j>(n+1)/2&&j>i:

                fmt.Printf("%d ",GS4(i,j,n))

            default:

                fmt.Printf("%d ",GS6(i,j,n))

            }

        }

        fmt.Println()

    }

}


 

func GS1(a int ,b int,c int)(d int){

     m:=4 *c *(a-1)-(2*b-2)*(2*b-2)+1

     if a==b {

         return m

     }

     return GS1(a,b-1,c)+1

}

 

func GS2(a int, b int,c int)(d int){

    if a+b == c+2{

        m:=GS3(a,b-1,c)-1

        return m

    }

    return GS2(a,b-1,c)-1

}

 

func GS3(a int,b int,c int)(d int){

    if a == b+1{

        m:=GS1(a,b+1,c)-1

        return m

    }

    return GS3(a-1,b,c)-1

}

 

func GS4(a int,b int,c int)(d int){

    if a == b-1{

        m:=GS2(a+1,b,c)-1

        return m

    }

    return GS4(a+1,b,c)-1

}

 

func GS5(a int,b int,c int)(d int){

    m:=c*c

    return m

}

func GS6(a int,b int,c int)(d int){

    if a==b && b> (c+1)/2{

        m:=GS4(a-1,b,c)+1

        return m

    }

    return GS6(a,b+1,c)+1

}

 

func main(){

    n := 5

    if n % 2 == 0 {

        SortEven(n)

    }

    if n % 2 == 1{

        SortOdd(n)

    }

}

转载于:https://my.oschina.net/u/3686016/blog/1541015

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值