第五届蓝桥杯C/C++本科B组(真题试做)(6~8)

终于考完……不过挂科的铁定的了。

还是来做题吧。

前面八道题做起来都很简单。

F:

标题:奇怪的分式

    上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:

    1/4 乘以 8/5 

    小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)

    老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!

    对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?

    请写出所有不同算式的个数(包括题中举例的)。

    显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。

    但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!

注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。

还是暴力就是了。答案是 14 。

#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<bitset>
#include<vector>
#include<cmath>

#define INF 0x7fffffff
#define eps 1e-8
#define LL long long
#define PI 3.141592654
#define CLR(a,b) memset(a,b,sizeof(a))
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define FOR_(i,a,b) for(int i=a;i>=b;i--)
#define pub push_back
#define puf push_front
#define pob pop_back
#define pof pop_front
#define mp make_pair
#define ft first
#define sd second
#define sf scanf
#define pf printf
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(),(v).end()
#define acfun std::ios::sync_with_stdio(false)

#define SIZE 10000  +1

using namespace std;

int main()
{
    int ans=0;
    FOR(i1,1,10)
    {
        FOR(j1,1,10)
        {
            if(i1==j1)continue;
            FOR(i2,1,10)
            {
                FOR(j2,1,10)
                {
                    if(i2==j2)continue;
                    double tmp1,tmp2;
                    tmp1=i1/(j1*1.0)*(i2/(j2*1.0));
                    tmp2=(i1*10+i2)*1.0/((j1*10+j2)*1.0);
                    //pf("%.2f %.2f\n",tmp1,tmp2);
                    if(abs(tmp1-tmp2)<=eps)ans++;
                }
            }
        }
    }
    pf("%d\n",ans);
}

G:

标题:六角填数

    如图【1.png】所示六角形中,填入1~12的数字。

    使得每条直线上的数字之和都相同。

    图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?

请通过浏览器提交答案,不要填写多余的内容。

用一个数组表示为 a[12] 。

枚举一下就可以了,还是属于暴力。

答案是 10.

全部的12个数字是 1 8 9 2 7 10 12 6 5 4 11 3

bool vis[13];
int a[13];
bool cheack()
{
    int tmp=a[1]+a[3]+a[6]+a[8];
    if(a[1]+a[4]+a[7]+a[11]!=tmp)return 0;
    if(a[2]+a[3]+a[4]+a[5]!=tmp)return 0;
    if(a[8]+a[9]+a[10]+a[11]!=tmp)return 0;
    if(a[2]+a[6]+a[9]+a[12]!=tmp)return 0;
    if(a[5]+a[7]+a[10]+a[12]!=tmp)return 0;
    return 1;
}
void dfs(int i)
{
    if(i==12)
    {
        if(!cheack())return;
        FOR(i,1,13)
        pf("%d ",a[i]);
    }
    FOR(j,1,13)
    {
        if(vis[j])continue;

        vis[j]=1;
        a[i]=j;
        dfs(i+1);
        vis[j]=0;
    }
}

int main()
{
    a[1]=1,a[2]=8,a[12]=3;
    CLR(vis,0);
    vis[1]=1,vis[8]=1,vis[3]=1;
    dfs(3);
}

H:

标题:蚂蚁感冒

    长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 

    每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。

    当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。

    这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。

    请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

【数据格式】

    第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。

    接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。

    要求输出1个整数,表示最后感冒蚂蚁的数目。

例如,输入:
3
5 -2 8
程序应输出:
1

再例如,输入:
5
-10 8 -20 12 25
程序应输出:
3

资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

把两只蚂蚁相撞当成没有碰过就好了。统计一下 前面相反的,如果有就加上后面相同的。

#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<bitset>
#include<vector>
#include<cmath>

#define INF 0x7fffffff
#define eps 1e-8
#define LL long long
#define PI 3.141592654
#define CLR(a,b) memset(a,b,sizeof(a))
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define FOR_(i,a,b) for(int i=a;i>=b;i--)
#define pub push_back
#define puf push_front
#define pob pop_back
#define pof pop_front
#define mp make_pair
#define ft first
#define sd second
#define sf scanf
#define pf printf
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(),(v).end()
#define acfun std::ios::sync_with_stdio(false)

#define SIZE 10000  +1

using namespace std;

bool cheack(int a,int b)
{
    if(a>0&&b<0)return 1;
    if(a<0&&b>0)return 1;
    return 0;
}
int main()
{
    int n,a[51];
    while(~sf("%d",&n))
    {
        FOR(i,0,n)
        sf("%d",&a[i]);
        int l=0,r=0;
        int ans=0;
        FOR(i,0,n)
        {
            if(a[0]>0)
            {
                if(abs(a[i])>abs(a[0])&&cheack(a[0],a[i]))
                    ans++;
                if(abs(a[i])<abs(a[0])&&cheack(-a[0],a[i]))
                    ans++;
            }
            else
            {
                if(abs(a[i])<abs(a[0])&&cheack(a[0],a[i]))
                    ans++;
                if(abs(a[i])>abs(a[0])&&cheack(-a[0],a[i]))
                    ans++;
            }
        }
        pf("%d\n",ans+1);
    }
}

至于后面两个题。一个应该是记忆化搜索,还有一个应该是求逆序,归并或者数状数组,先放个元旦,有空就做。

时间: 2024-10-06 21:30:12

第五届蓝桥杯C/C++本科B组(真题试做)(6~8)的相关文章

第五届蓝桥杯C/C++本科B组(真题试做)(1~5)

菜鸡只能报个B组.于是报了第六届的本科B.就找了上届的本科B的题来做做. A: 标题:啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒. 注意:答案是一个整数.请通过浏览器提交答案. 不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等). 对于这种,我直接暴力了. double a=2.3,b=1.9; FOR(j,0,SIZE) FOR(i,0,j) { if(abs(a*i+b*

第五届蓝桥杯C/C++本科B组(真题试做)(9~10)

第九题 迷宫取宝 标题:地宫取宝 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿). 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明. 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝. [数据格式] 输入

算法笔记_216:第六届蓝桥杯软件类校赛部分真题(Java语言C组)

目录 1 题目一 2 题目二 3 题目三 4 题目四 5 题目五 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学家杨辉1261年所著的<详解九章算法>一书里就出现了. 其排列规律: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 如下的程序,用来建立N行的杨辉三角形.请填写划线部分缺少的代码.

算法笔记_215:第六届蓝桥杯软件类校赛部分真题(Java语言B组)

目录 1 题目一 2 题目二 3 题目三 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 java中提供了对正则表达式的支持. 有的时候,恰当地使用正则,可以让我们的工作事半功倍! 如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码. 注意:只填写缺少代码,不要写任何多余内容,例如,已有的双引号. public class A { public static int f(String s) { return s.split("________________&quo

[JAVA][2013蓝桥杯预赛 JAVA本科B组][黄金连分数]

标题: 黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误,对那样一个庞然大物, 其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了"近视眼"!! 言归正传,我们如何求得黄金分割数的尽可能精确的值呢?有许多方法. 比较简单的一种是用连分数: 1 黄金数 = -------------------

[JAVA][2013蓝桥杯预赛 JAVA本科B组][错误票据]

标题:错误票据 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号. 你的任务是通过编程,找出断号的ID和重号的ID. 假设断号不可能发生在最大和最小号. 要求程序首先输入一个整数N(N<100)表示后面数据行数. 接着读入N行数据. 每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000) 每个整

第五届蓝桥杯决赛C\C++B组——生物芯片

第一部分:题目 生物芯片 X博士正在研究一种生物芯片,其逻辑密集度.容量都远远高于普通的半导体芯片. 博士在芯片中设计了 n 个微型光源,每个光源操作一次就会改变其状态,即:点亮转为关闭,或关闭转为点亮. 这些光源的编号从 1 到 n,开始的时候所有光源都是关闭的. 博士计划在芯片上执行如下动作: 所有编号为2的倍数的光源操作一次,也就是把 2 4 6 8 ... 等序号光源打开 所有编号为3的倍数的光源操作一次, 也就是对 3 6 9 ... 等序号光源操作,注意此时6号光源又关闭了. 所有编

第五届蓝桥杯决赛C\C++B组——出栈次序

第一部分:题目 出栈次序 X星球特别讲究秩序,所有道路都是单行线.一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行. 路边有个死胡同,只能容一辆车通过,是临时的检查站. X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查. 如果车辆进入检查站和离开的次序可以任意交错.那么,该车队再次上路后,可能的次序有多少种? 为了方便起见,假设检查站可容纳任意数量的汽车. 显然,如果车队只有1辆车,可能次序1种:2辆车可能次序2种:3辆车可能次序5种. 现在

2013第四届蓝桥杯 C/C++本科A组 排它平方数(2个数相乘为大数,大数位标记的方法)

小明正看着 203879 这个数字发呆. 原来,203879 * 203879 = 41566646641 这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字. 具有这样特点的6位数还有一个,请你找出它! 再归纳一下筛选要求: 1. 6位正整数 2. 每个数位上的数字不同 3. 其平方数的每个数位不含原数字的任何组成数位 答案是一个6位的正整数. 请通过浏览器提交答案. 注意:只提交另一6位数,题中已经给出的这