剪邮票


如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。


请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
答案: (19分)

先选择五个数共有792种选法,然后判断五个数是否连通。共116种。

代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iomanip>

using namespace std;
int v[13],s[6],c,e;
int check()
{
    int flag = 0;
    for(int i = 1;i <= 5;i ++)
    {
        int d = 0;
        for(int j = 1;j <= 5;j ++)
        {
            if(s[i] == s[j])continue;
            if(s[i] + s[j] != 9 && s[i] + s[j] != 17 && abs(s[j] - s[i]) == 1 || abs(s[j] - s[i]) == 4)
            {
                d ++;
            }
        }
        if(!d)return 0;
        flag += d;
    }
    if(flag >= 8)return 1;
    return 0;
}
void dfs(int k)
{
    if(k >= 6)
    {
        if(check())c ++;
        for(int i = 1;i <= 5;i ++)
        {
            cout<<s[i]<<‘ ‘;
        }
        cout<<endl<<check()<<endl;
        return;
    }
    for(int i = s[k - 1] + 1;i <= 12;i ++)
    {
        if(!v[i])
        {
            v[i] = 1;
            s[k] = i;
            dfs(k + 1);
            v[i] = 0;
        }
    }
}
int main()
{
    dfs(1);
    cout<<c;
}

原文地址:https://www.cnblogs.com/8023spz/p/8421865.html

时间: 2024-08-01 05:31:35

剪邮票的相关文章

java算法 第七届 蓝桥杯B组(题+答案) 7.剪邮票

7.剪邮票  (结果填空) 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的剪取方法. 请填写表示方案数目的整数.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 思路: 感觉还是先排列,从12个邮票中选5个出来,         然后对每个邮票搜索,同一行,同一列,则表示连接到,如果连接到就定义 

16年第七届蓝桥杯第七题_剪邮票

剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的剪取方法. 请填写表示方案数目的整数.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. //枚举所有可能的组合,然后判断是否连通 #include<iostream> #include<cstdio> #include<cst

第七届蓝桥杯省赛7:剪邮票

第七届蓝桥杯省赛7:剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的剪取方法. 请填写表示方案数目的整数. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 解决思路:先将所有五个一组的情况遍历,然后用广度优先判断是否连通. 我在选五个一组的时候是用的 for 先选出第几个邮票,然后将其

7.剪邮票

如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的剪取方法. 请填写表示方案数目的整数.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 分析:

剪邮票 dfs

如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的剪取方法.请填写表示方案数目的整数.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 题目答案: 116 题目思路: 枚举五种数的所有组合然后判断这五个数是否连通即可.判断连通性可以用DFS来判断,上下左右四个方向可以将题目中的1,2,3,4,5,6,

2016蓝桥杯C++A组第七题 剪邮票

从1-12中从小到大选取5个数(DFS) BFS判断找出来的5个数是否连通:以任意一个(我的程序取得是最小的)为起点,BFS搜索   是否可以搜索到5个 如果可以 说明是连通的 #include<iostream> #include<stdio.h> #include<cmath> #include<queue> using namespace std; int a[13] = { 0 };//dfs int l[5];//存储已经 找到的5个数 int s

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh童鞋的提醒. 勘误2:第7题在推断连通的时候条件写错了,后两个if条件中是应该是<=12 落了一个等于号.正确答案应为116. 1.煤球数目 有一堆煤球.堆成三角棱锥形.详细: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形). -. 假设一共

第七届蓝桥杯本科B组省赛

煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), -. 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 思路: 推出第i层有i*(i+1)/2个煤球,累加到100层即可,答案为171700 #include <bits/stdc++.h> using namespace std; int main() {

2016年 蓝桥杯省赛(Java)

煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 171700 public class Main { public static void main(String[] args) { int ans = 0; for(int i = 1; i <=