zoukankan      html  css  js  c++  java
  • 合理分配 “锁”资源

    问题描述:某部门要安装电子锁,要求在M个工作人员中每人发一张磁卡,卡上有解锁的磁条,为了确保安全,必须要N个人在一起才能将锁打开,输入M,N  求磁条最小方案。如:

    样例输入:

    5 3

    样例输出:

    0111000111
    0011111010
    1001011101
    1100101011
    1110110100

    1代表能解开该处的磁条,0代表不能解开

    今天晚上写的太累了,就不解释了,下次加上注释说明。直接上代码:

    #include "iostream"
    #include "string"
    using namespace std;
    
    bool fun(int num,int col){
    	int a = 0;
    	while(num>0){
    		if(num%2==1) a++;
    		num /= 2;
    	}
    	if(a==col) return true;
    	return false;
    }
    
    string change(int num,int length){
    	string result;
    	while(num>0){
    		int a = num%2 + '0';
    		result.insert(0,1,(char)a);
    		num/=2;
    	}
    	int t = length - result.size();
    	result.insert(0,t,'0');
    	return result;
    }
    
    int main(){
    	int m,n;
    	cin>>m>>n;
    	int lock,openLock,closeLock;
    	int t1 = 1,t2 = 1;
    	for(int i=0;i<n-1;i++){
    		t1 *= (m-i);
    		t2 *= (i+1);
    	}
    	lock = t1/t2;
    	int *p = new int[lock];
    	int col = m-n+1;
    	int temp = 0;
    	for(int i=0;i<lock;i++){
    		temp++;
    		while(!fun(temp,col)){
    			temp++;
    		}
    		p[i] = temp;
    	}
    	string *ps = new string[lock];
    	for(int i=0;i<lock;i++){
    		ps[i] = change(p[i],m);
    	}
    	
    	for(int i=0;i<m;i++){
    		for(int j=0;j<lock;j++){
    			cout<<ps[j][i];
    		}
    		cout<<endl;
    	}
    }


  • 相关阅读:
    第1章 引论
    Java反射
    用户职责菜单请求组
    API及接口清单
    独立值集导入脚本
    报表对应程序包查询
    正则表达式
    合并工作表
    去重
    分割表
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3478776.html
Copyright © 2011-2022 走看看