2018年藍橋杯A組C/C++決賽題解

2018年第九屆藍橋杯A組C/C++決賽題解

點擊查看視頻題解
點擊查看2018年藍橋杯A組C/C++決賽題目(不含答案)html

1:三角形面積

畫個圖,求三角形面積,能夠用外接長方形 - 其餘多餘區域面積c++

固然網上不少用海倫公式啊什麼的均可以的ide

#include<bits/stdc++.h>
using namespace std;

double x1 = 2.3;
double yy1 = 2.5;
double x2 = 6.4,y2 = 3.1;
double x3 = 5.1,y3 = 7.2; 

int main(){
    double a = x2 - x1;
    double b = y3 - yy1;
    double c = x3 - x1;
    double d = x2 - x3;
    double e = y2 - yy1;
    double f = y3 - y2;
    cout<<a*b<<endl;
    double s = a * b - a * e * 0.5 - b * c * 0.5 - d * f * 0.5;
    cout<<s<<endl;
    return 0;
} 
//8.795

 
 

2:閱兵方陣

枚舉
題意是:將一個數分紅兩個平方數相加,求天然數中一共能分12組的最小值
預處理因此平方數,枚舉就能夠了,還要注意,這裏要分解成12組不一樣的數,咱們枚舉時會計算兩個平方數交換的次數,因此算成12*2組就能夠了。spa

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll maxn = 1e7+10;
ll can[maxn];

void init(){
    for(ll i=1;i<=1e6;i++){
        if(i * i > maxn) break;
        can[i*i] = 1;
    }
}

int main(){
    init();
    //能組成12個
    for(int k = 1105;k<=200000;k++){
        int ans = 0;
        for(int a=1;a<=k;a++){
            if(!can[a]) continue;
            if(!can[k - a]) continue;
            ans++;
        }
        if(ans == 12*2){
            cout<<k<<endl;
            break;
        }
    }
    return 0;
} 
//5525 a 和 k-a 交換
//160225 不能交換

 
 

3:找假幣

網上也都是這個答案,不保證正確性:balance(data[0] + data[1] + data[2] , data[3] + data[4] + data[5]).net

 
 

4:約瑟夫環

30% - 80%數據點能夠用隊列暴力作的code

設置變量計數器t
若是t == k:隊頭出隊, t賦值爲1
不然t++,對頭出隊再進隊尾視頻

100%轉換成約瑟夫數學問題了,見題解:http://www.javashuo.com/article/p-bazvhiow-en.htmlhtm

30%暴力作法代碼:blog

#include<bits/stdc++.h>
using namespace std;

/*
使用隊列模擬
能過部分數據

設置變量計數器t
若是t == k:隊頭出隊, t賦值爲1
不然t++,對頭出隊再進隊尾
*/

queue<int> q;
int n,k;

int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        q.push(i);
    }
    int t = 1;
    while(q.size() > 1){
        int front = q.front();
        if(t == k){
            q.pop();
            t = 1;
        }else{
            q.pop();
            q.push(front);
            t++;
        }
    }
    cout<<q.front()<<endl;
    return 0;
}

 
 

5:自描述序列

30%數據點暴力
100%遞推 見題解:https://blog.csdn.net/metaphysis/article/details/6532638隊列

30%暴力作法代碼:

#include<bits/stdc++.h>
using namespace std;

//模擬 30%數據 
int n;
vector<int> v;

void init(){
    v.push_back(1);
    v.push_back(1);
    v.push_back(2);
    v.push_back(2);
}

int main(){
    cin>>n;
    init();
    int ans = 4;
    for(int i=3;i<=n;i++){
        int t = v[i];
        if(ans < n){
            for(int j=1;j<=t;j++){
                v.push_back(i);
            }
            ans += t;
        }else{
            break;
        }
    }
    cout<<v[n]<<endl;
    return 0;
}

 
 

6:採油

沒寫

相關文章
相關標籤/搜索