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的正整數。

相關文章
相關標籤/搜索