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;
    	}
    }


  • 相关阅读:
    zendstuido10 配置spket插件
    Extjs各版本的下载链接
    主题:Android、iPhone和Java三个平台一致的加密工具
    TestDisk 恢复rm -rf 的文件
    java实现定时任务的三种方法
    mac 下安装 lua5.3 + cjson
    Mac OS X 上Lua的安装方法
    Channel States
    JSON常见操作
    微信小程序——获取元素的宽高等属性
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3478776.html
Copyright © 2011-2022 走看看