package main import ( "bufio" "fmt" "os" ) func main() { for i := 0; i < 5; i++ { p(i) } } func p(v int) { var arr [][]int a := []int{1, 1, 1, 1, 1, 1, 1} for i := 0; i < 6; i++ { b := make([]int, 7, 7) copy(b, a) b[i] = 0 b[i+1] = 0 arr = append(arr, b) } f, err := os.Create(fmt.Sprintf("E:\\每天%d人排班.txt", v)) if err != nil { return } defer f.Close() w := bufio.NewWriter(f) count := 0 //arrr := make([][][]int, 0, 720) dayArr := make([]string, 0, 720) for _, i1 := range arr { for _, i2 := range arr { for _, i3 := range arr { for _, i4 := range arr { for _, i5 := range arr { for _, i6 := range arr { a = make([]int, 7, 7) for i := 0; i < 7; i++ { a[i] = i1[i] + i2[i] + i3[i] + i4[i] + i5[i] + i6[i] } str := fmt.Sprintf("%d,%d,%d,%d,%d,%d,%d", a[0], a[1], a[2], a[3], a[4], a[5], a[6]) // 排列中存在等于v天的 存在0~4天, flag := true for _, i := range a { if i == v { flag = false break } } if flag { continue } // 必须大于等于v天才放行 for _, i := range a { if i < v { flag = true break } } for _, i := range dayArr { if i == str { flag = true break } } if !flag { count++ dayArr = append(dayArr, str) //fmt.Println(a) fmt.Printf("输出排法%03d(%v):%v %v %v %v %v %v\n", count, str, i1, i2, i3, i4, i5, i6) fmt.Fprintf(w, "输出排法%03d(%v):%v %v %v %v %v %v\n", count, str, i1, i2, i3, i4, i5, i6) } } } } } } } fmt.Fprintf(w, "共%d种排法", count) w.Flush() }