蓝桥杯模拟赛 猜算式

你一定还记得小学学习过的乘法计算过程,比如:

273
x 15
------
1365
273
------
4095

请你观察如下的乘法算式

***
x ***
--------
***
***
***
--------
*****

星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如因字体而产生对齐问题,请参看图p1.jpg)

请写出这个式子最终计算的结果,就是那个5位数是多少?

注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。

思路:DFS

#include<stdio.h>
#include<iostream>
using namespace std;
int a[20];
int f[10];//计算0-9出现了多少次
int f2[10];
void show(){
    for(int i=0;i<20;i++){
        if(i==3||i==6||i==9||i==12||i==15) printf("\n%d",a[i]);
        else  printf("%d",a[i]);

    }
    printf("\n-------------\n");
}
bool ok(){
    for(int i=0;i<10;i++){
        if(f[i]>2) return false;
    }
    return true;
}
void dfs(int x){
    if(x==6){

        for(int i=0;i<10;i++){
            f[i]=f2[i];
        //    printf("%d,",f[i]);
        }
        int t=a[0]*100+a[1]*10+a[2];
        for(int i=6;i<13;i=i+3){
            if(i<9){
                if(a[5]*t/1000!=0) return;
                a[i]=a[5]*t/100;
                a[i+1]=a[5]*t/10%10;
                a[i+2]=a[5]*t%10;
            }
            if(i==9){
                if(a[4]*t/1000!=0) return;
                a[i]=a[4]*t/100;
                a[i+1]=a[4]*t/10%10;
                a[i+2]=a[4]*t%10;
            }
            if(i==12){
                if(a[3]*t/1000!=0) return;
                a[i]=a[3]*t/100;
                a[i+1]=a[3]*t/10%10;
                a[i+2]=a[3]*t%10;
            }
            f[a[i]]++;
            f[a[i+1]]++;
            f[a[i+2]]++;
            if(!ok()) return;
        }
        int t1=a[3]*t*100+a[4]*t*10+a[5]*t;
        if (t1/100000!=0) return;
        a[15]=t1/10000;
        a[16]=t1/1000%10;
        a[17]=t1/100%10;
        a[18]=t1/10%10;
        a[19]=t1%10;

        for(int i=15;i<20;i++){
            f[a[i]]++;
            if(!ok()){
                return;
            }
        }
        show();
        return;
    }
    for(int i=0;i<10;i++){
        if(f2[i]<2){
            a[x]=i;
            f2[i]++;
            dfs(x+1);
            f2[i]--;
        }
    }
}
int main(){
    dfs(0);
    return 0;
}

时间: 2024-09-30 12:07:20

蓝桥杯模拟赛 猜算式的相关文章

蓝桥杯-题目:猜算式

题目:猜算式 你一定还记得小学学习过的乘法计算过程,比如: 273x 15------ 1365 273------ 4095 请你观察如下的乘法算式 ***x ***-------- *** *** ***-------- ***** 星号代表某位数字,注意这些星号中,0~9中的每个数字都恰好用了2次.(如因字体而产生对齐问题,请参看图p1.jpg) 请写出这个式子最终计算的结果,就是那个5位数是多少? 注意:只需要填写一个整数,不要填写任何多余的内容.比如说明文字. #include <bi

蓝桥杯模拟赛-引爆炸弹-DFS+并查集

今天整理电脑,翻出来了很久以前大佬给的题,贴一下. 引爆炸弹 1000ms 在一个 n×m的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去. 现在为了引爆地图上的所有炸弹,需要手动引爆其中一些炸弹,为了把危险程度降到最低,请算出最少手动引爆多少个炸弹可以把地图上的所有炸弹引爆. 输入格式 第一行输两个整数 n,mn,mn,m,用空格隔开. 接下来 nnn 行,每行输入一个长度为 mmm 的字符串,表示地

[JAVA][2013蓝桥杯模拟赛 JAVA本科B组][第四题:二阶魔方]

[题目取自CSDN-671coder] 第四题:二阶魔方 题目描述: 魔方可以对它的6个面自由旋转. 我们来操作一个2阶魔方(如图1所示) 为了描述方便,我们为它建立了坐标系. 各个面的初始状态如下: x轴正向:绿 x轴反向:蓝 y轴正向:红 y轴反向:橙 z轴正向:白 z轴反向:黄 假设我们规定,只能对该魔方进行3种操作.分别标记为: x 表示在x轴正向做顺时针旋转 y 表示在y轴正向做顺时针旋转 z 表示在z轴正向做顺时针旋转 基本旋转后的效果如图2,3,4所示. xyz 则表示顺序执行x,

蓝桥杯模拟赛 青出于蓝而胜于蓝

武当派一共有 nn 人,门派内 nn 人按照武功高低进行排名,武功最高的人排名第 11,次高的人排名第 22,... 武功最低的人排名第 nn.现在我们用武功的排名来给每个人标号,除了祖师爷,每个人都有一个师父,每个人可能有多个徒弟. 我们知道,武当派人才辈出,连祖师爷的武功都只能排行到 pp.也就是说徒弟的武功是可能超过师父的,所谓的青出于蓝胜于蓝. 请你帮忙计算每个人的所有子弟(包括徒弟的徒弟,徒弟的徒弟的徒弟....)中,有多少人的武功超过了他自己. 输入格式 输入第一行两个整数 n, p

2018 蓝桥杯省赛 B 组模拟赛(一)

2018 蓝桥杯省赛 B 组模拟赛(一) A.今天蒜头君带着花椰妹和朋友们一起聚会,当朋友们问起年龄的时候,蒜头君打了一个哑谜(毕竟年龄是女孩子的隐私)说:“我的年龄是花椰妹年龄个位数和十位数之和的二倍”. 花椰妹看大家一脸懵逼,就知道大家也不知道蒜头君的年龄,便连忙补充道:“我的年龄是蒜头君个位数和十位数之和的三倍”. 请你计算:蒜头君和花椰妹年龄一共有多少种可能情况? 提醒:两位的年龄都是在 [10,100)[10,100) 这个区间内. 题解: 暴力枚举 answer: 1 代码如下: #

蓝桥杯省赛总结

3.28号下午查到了成绩,还行,考到B组省赛一等奖,可以进入决赛. 成绩的结果还是很意外的,因为自己没怎么准备,试题有的题就是瞎写的,只看了官网的两个辅导视频.剩下的懒了 就没看... 面对这电脑,看着题目,才意识到自己的不足之处.以前总是急功近利,想着学几门编程语言,现在才真正明白,语言只是个工具,自己要懂得利用一门编程语言解决实际的问题,并且考虑到优化提高的办法,这样才能提高自己能力,而不是会多少编程语言. 今天记录这些,就是激励自己,以一颗平静的心去学习.在记录,总结,展望中不断地提高自己

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

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

2015年蓝桥杯省赛B组C/C++(试题+答案)

首先说,这次我是第二次参加蓝桥杯(大学里最后一次),可这次去连个三等都没拿到,有些心灰意冷,比上一次还差, 当时看到成绩出来的时候有些失落,但是跌倒了,再站起来继续跑就可以了.可能是状态不好吧,纯属自我安慰. 接下来我把今年的题目又重新做了一遍,写下了这篇博客,如果也有需要探讨答案的,希望可以有帮助. 第一题: 第1题:统计不含4的数字 题目大意 统计10000至99999中,不包含4的数值个数. 解题分析: 第一种解法: 数学方法,这种是在网上看到的一种解法: 最高位除了0.4不能使用,其余8

第六届蓝桥杯2015-省赛-C语言大学B组 个人题解

题目连接:http://course.baidu.com/view/2d86a6c1960590c69fc37622.html 1,奖券数目52488 #include <iostream> using namespace std; bool isOK(int a) { while(a) { if(a%10==4) return false; a /= 10; } return true; } int main() { int ans = 0; for(int i=10000; i<=9