zoukankan      html  css  js  c++  java
  • 六角填数|2014年蓝桥杯B组题解析第七题-fishers

    六角填数

    如图所示六角形中,填入1~12的数字。
    使得每条直线上的数字之和都相同。
    图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
    请通过浏览器提交答案,不要填写多余的内容。

    思路:dfs搜索所有方案,参数k表示当前是第k个位置上的搜索

    代码:

    #include<iostream>
    using namespace std;
    
    //求解a[6]的值 
    int a[15]; //从上到下从左到右,存放各个位置填的值 
    int visited[13]; //判断是否用过1~12这几个数 
    int b[6]; //共6个直线 
    
    /*检查是否满足条件*/ 
    bool test(){
    	
    	b[0] = a[2] + a[3] + a[4] + a[5];
    	b[1] = a[1] + a[3] + a[6] + a[8];
    	b[2] =  a[2] + a[6] + a[9] + a[12];
    	b[3] = a[5] + a[7] + a[10] + a[12];
    	b[4] = a[1] + a[4] + a[7] + a[11];
    	b[5] = a[8] + a[9] + a[10] + a[11];
    	//判断是否有不相等的 直接return 不满足 
    	for(int i=0;i<=5;i++){
    		for(int j=0;j<=5;j++){
    			if(b[i]!=b[j]){
    				return false;
    			}
    		}
    	}
    
    	return true;
    }
    
    //dfs搜索,参数k表示第几个位置 
    void dfs(int k){
    	if(k == 12){
    		//...检查是否满足要求 
    		if(test()){
    			cout<<a[6]<<endl;
    		}
    		return;
    	}
    
    	
    	for(int i=1;i<=12;i++){
    		if(!visited[i]){
    			visited[i] = 1;
    			a[k] = i;
    			dfs(k+1);
    			visited[i] = 0;	
    		}
    
    	}
    }
    
    int main(){
    	//初始化 
    	a[1] = 1;
    	a[2] = 8;
    	a[12] = 3;
    	visited[1] = 1;
    	visited[8] = 1;
    	visited[3] = 1;
    	dfs(3);//从第3个位置开始dfs 
    }
  • 相关阅读:
    eazsy-ui 按钮样式
    sql
    事务
    spring-aop切入点配置
    改变HTML文件上传控件样式(隐藏默认样式 用点击图片间接调用)
    JS的几条规则
    JS高阶函数
    JAVA中的工厂方法模式和抽象工厂模式
    JAVA单例模式
    JAVA对象创建的过程
  • 原文地址:https://www.cnblogs.com/fisherss/p/10286543.html
Copyright © 2011-2022 走看看