2018年蓝桥杯A组C/C++决赛题目

2018年蓝桥杯A组C/C++决赛题目

2018年蓝桥杯A组C/C++决赛题解html

 
 

1:三角形面积

已知三角形三个顶点在直角坐标系下的坐标分别为:
(2.3, 2.5)
(6.4, 3.1)
(5.1, 7.2)code

求该三角形的面积。htm

注意,要提交的是一个小数形式表示的浮点数。
要求精确到小数后3位,如不足3位,须要补零。blog

 
 

2:阅兵方阵

x国要参加同盟阅兵活动。
主办方要求每一个加盟国派出的士兵刚好能组成 2 个方阵。
x国发现弱小的 y国派出了130人的队伍,他们的士兵在行进中能够变换2种队形:
130 = 81 + 49 = 9^2 + 7^2
130 = 121 + 9 = 11^2 + 3^2游戏

x国君很受刺激,以为x国面积是y国的6倍,理应变出更多队形。
因而他发号施令:
咱们要派出一支队伍,在行进中要变出 12 种队形!!!get

手下人可惨了,要忙着计算至少多少人才能组成 12 种不一样的双方阵。
请你利用计算机的优点来计算一下,至少须要多少士兵。it

(ps: 不要失去信心,1105人就能组成4种队形了)io

注意,须要提交的是一个整数,表示至少须要士兵数目,不要填写任何多余的内容。
 
 程序

3:找假币

在8枚硬币中,有1枚假币,假币外观与真币如出一辙,只是重量略轻或略重一点。
给你一架天平,要求最多称3次,就找出假币,而且知道它是重一些仍是轻一些。
下面的代码给出一个解决方案,仔细分析逻辑,填写划线位置缺乏的代码。数据

#include <stdio.h>

int balance(int a, int b)
{
    if(a<b) return -1;
    if(a>b) return 1;
    return 0;
}

void judge(char* data, int a, int b, int std)
{
    switch(balance(data[a],data[std])){
    case -1:
        printf("%d light\n", a);
        break;
    case 0:
        printf("%d heavy\n", b);
        break;
    case 1:
        printf("err!\n", b);
    }
}

// data 中8个元素,有一个假币,或轻或重
void f(char* data)
{
    switch( ____________________________________ ){  // 填空
    case -1:
        switch(balance(data[0]+data[4],data[3]+data[1])){
            case -1:
                judge(data,0,3,1);
                break;
            case 0:
                judge(data,2,5,0);
                break;
            case 1:
                judge(data,1,4,0);
        }
        break;
    case 0:
        judge(data,6,7,0);      
        break;
    case 1:
        switch(balance(data[0]+data[4],data[3]+data[1])){
            case -1:
                judge(data,4,1,0);
                break;
            case 0:
                judge(data,5,2,0);
                break;
            case 1:
                judge(data,3,0,1);
        }
        break;      
    }   
}

int main()
{
    int n;
    char buf[100];
    
    scanf("%d", &n);
    gets(buf);
    
    int i;
    for(i=0; i<n; i++){
        gets(buf);
        f(buf);
    }
    
    return 0;
}

 
 

4:约瑟夫环

n 我的的编号是 1~n,若是他们依编号按顺时针排成一个圆圈,从编号是1的人开始顺时针报数。
(报数是从1报起)当报到 k 的时候,这我的就退出游戏圈。下一我的从新从1开始报数。
求最后剩下的人的编号。这就是著名的约瑟夫环问题。

本题目就是已知 n,k 的状况下,求最后剩下的人的编号。

题目的输入是一行,2个空格分开的整数n, k
要求输出一个整数,表示最后剩下的人的编号。

约定:0 < n,k < 1百万

例如输入:
10 3

程序应该输出:
4

 
 

5:自描述序列

小明在研究一个序列,叫Golomb自描述序列,不妨将其记做{G(n)}。这个序列有2个颇有趣的性质:

  1. 对于任意正整数n,n在整个序列中刚好出现G(n)次。
  2. 这个序列是不降低的。

如下是{G(n)}的前几项:

n 1 2 3 4 5 6 7 8 9 10 11 12 13
G(n) 1 2 2 3 3 4 4 4 5 5 5 6 6

给定一个整数n,你能帮小明算出G(n)的值吗?

输入

一个整数n。

对于30%的数据,1 <= n <= 1000000
对于70%的数据,1 <= n <= 1000000000
对于100%的数据,1 <= n <= 2000000000000000

输出

一个整数G(n)

【样例输入】
13

【样例输出】
6

 
 

6:采油

LQ公司是世界著名的石油公司,为世界供应优质石油。
最近,LQ公司又在森林里发现了一大片区域的油田,能够在这个油田中开采n个油井。
LQ公司在这n个油井之间修建了n-1条道路,每条道路链接两个油井,路径中间不会路过任何油井,并且这些道路将全部油井连通。
创建油井的时候须要使用一台大型设备,运输起来很是麻烦,LQ公司准备在其中的一个油井位置创建一个空运站,先将设备空运到空运站,以后每次通过他们创建的道路来运输这个大型设备以创建不一样的油井,当油井创建完毕后再从空运站将大型设备运走。
为了减小运输的麻烦,公司要求大型设备在道路上运输的总路程是最短的。

在创建油井和采油的过程当中须要花费一些人力,第i个油井须要花费Bi我的,而一旦油井建成,就须要Si我的一直坚守在油井上进行维护。
固然,若是一我的参与了油井的建设,他能够直接留下来维护油井,或者参与下一个油井的建设,可是在维护油井的人不能再参加后续油井的建设了。

如今LQ公司想知道,大型设备运输的总路径长度最短是多少?在保证总路径长度最短的状况下,LQ公司至少须要花费多少人力才能完成全部油井的创建与维护。

【输入格式】
  输入的第一行包含一个整数n,表示油井的数量。油井由1到n依次标号。
  第二行包含n个整数,依次表示B1, B2, …, Bn,相邻的整数之间用一个空格分隔。
  第三行包含n个整数,依次表示S1, S2, …, Sn,相邻的整数之间用一个空格分隔。
  接下来n-1行描述油井之间的道路,其中的第i行包含两个整数a,b,用一个空格分隔,表示一条道路的起点为i+一、终点为a,长度为b,道路是双向的,设备能够从任意一端运送到另外一端,每条道路均可以通过任意屡次。数据保证任意两个油井之间均可以经过道路链接。

【输出格式】
  输出包含两个整数,用一个空格分隔,表示最优状况下大型设备须要运输的总路程,以及在总路程最短的状况下最少须要花费的人力数量。

【样例输入】
2
10 20
15 15
1 8

【样例输出】
16 30

【样例说明】
  有两种方案达到最优。
  方案一:在油井2创建空运站,先创建油井2,再将大型设备运输到油井1创建油井1,最后将大型设备运回油井2。
  方案二:在油井1创建空运站,先将大型设备运输到油井2创建油井2,再将大型设备运送到油井1创建油井1。

【样例输入】
6
3 10 20 7 15 9
2 6 10 4 8 7
1 9
1 2
2 5
3 4
3 7

【样例输出】
54 38

【数据规模和约定】   对于20%的数据:n不超过10;   另外20%的数据:每一个油井最多和两个油井之间有道路直接链接;   另外10%的数据:有n-1个油井只有一条道路与其余油井链接;   对于100%的数据:n不超过100000,B、S、c均为不超过10000的正整数。

相关文章
相关标签/搜索