• 问题: 某厂部班组有6个人,每周每人都要上5天班,而且每人都要连续休息两天?


    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()
    }
    

      

  • 相关阅读:
    ngix反向代理-之反向
    redux和flux究竟有什么不同, 说点自己的理解
    npm发包记录
    由一个聚焦-focus-事件异常跟踪引起的总结
    git查看分支的几个方法
    test-your-mind-快速测试自己的代码
    contos7 yum安装php7.2与swoole (2)
    php_ thinkphp 时间回滚
    30个php操作redis常用方法代码例子
    redis_php 安装与卸载
  • 原文地址:https://www.cnblogs.com/hardykay/p/16025916.html
Copyright © 2020-2023  润新知