360公司2018年春招笔试编程题题解

 

A了三题半……最后一道图论完全不会(看不懂题目)只好提前交卷,有一道贪心策略选不对,还有道大数幂+大数加减(或者DP),太复杂了没调试起来只有一半,整体来说智商题静下心来想一想还是不难的,360每年都考大数,这个特别蛋疼。

目录

1.画板

2.交易

3.派对

4.赛马

5.玫瑰花

6.奇异长度


1.画板

#include <iostream>
#include <cmath>
using namespace std;

int main(){
    int T;
    cin>>T;
    while(T--){
        int n;
        cin>>n;
        int sum = 0;
        for(int i=0;i<n;i++){
            int x1,y1,x2,y2;
            cin>>x1>>y1>>x2>>y2;
            sum+=((abs(y2-y1)+1)*(abs(x2-x1)+1));
        }
        cout<<sum<<endl;
    }
    return 0;
}

2.交易

智力题,一开始不知道要干嘛,纸上写一写想一想就明白了

没啥好说的....能被5整除就是YES,否则为NO,特殊情况是: 都为0的时候是NO

#include <iostream>
using namespace std;
 
int main(){
    int T;
    cin>>T;
    while(T--){
        int b[5];
        int sum = 0;
        bool flag = true;
        for(int i=0;i<5;i++){
            cin>>b[i];
            if(b[i]!=0)
                flag = false;
            sum+=b[i];
        }
        int aver = sum/5;
        if(flag)//特殊处理全零的情况
            cout<<-1<<endl;
        else if((aver*5-sum)!=0)
            cout<<-1<<endl;
        else
            cout<<aver<<endl;
    }
    return 0;
}

3.派对

这题我贪心策略选的有问题,我是从最小的气球开始考虑,先把最小的气球用光

正确应该是从最大的气球开始考虑,2:1搭配,先把最大的气球用光

qq表示各色气球的数量的列表,对qq进行排序,

因为要最大化搭配数,所以先从数量最多的气球qq[2]入手,

第一次搭配:最多颜色的气球2个搭配次多颜色的气球1个,总个数减去3个;

...

第i次搭配:最多颜色的气球2个搭配次多颜色的气球1个,总个数减去3*i个;

...

第n次:次多颜色的气球数量变成0后,搭配结束,此时总个数减去3*n个,一共有n种搭配。

但是结束的时候颜色最多的气球数量可能还有很多,所以此时考虑两种情况:

1)颜色最多的气球数量s == 0,1,2时,s//3==0,所以n=sum(qq)//3;

1)颜色最多的气球数量s > 3时,n=颜色最少的气球数量+颜色次少的气球数量;

 贴一个dalao能AC的代码:

#include <iostream>
using namespace std;
 
void sort(long *arr){
    for(long t=1;t<3;t++){
        for(long i=0;i<3-t;i++){
            if(arr[i] > arr[i+1]) swap(arr[i], arr[i+1]);
        }
    }
}
int main(){
    intT;
    cin>>T;
    long result;
    long arr[3];
    for(inti=0;i<T;i++){
        cin>>arr[0]>>arr[1]>>arr[2];
        sort(arr);
        if(arr[2] >= 2*(arr[1]+arr[0])) {
            result = arr[1] + arr[0];
        } else{
            result = (arr[0] + arr[1] + arr[2])/3;
        }
        cout<<result<<endl;
    }
    return0;
}

4.赛马

个人觉得这题最简单

排下序,第一组最差的马比第二组最强的马强就是YES,否则NO

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
 
int main(){
    int T;
    cin>>T;
    while(T--){
        int n;
        int temp;
        vector<int> v;
        cin>>n;
        for(int i=0;i<2*n;i++){
            cin>>temp;
            v.push_back(temp);
        }
        sort(v.begin(),v.end());
        if(v[n]>v[n-1])
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
        v.clear();
    }
}

5.玫瑰花

大数DP,不会,只能暴力来对15%

#include <iostream>
#include <cmath>
using namespace std;
typedef unsigned long long int l;
const long long mod = 772235;
int main(){
    double N,K;
    cin>>N>>K;
    double ans = (pow(K,N)-K);
    cout<<ans<<endl;
    return 0;
}

6.奇异长度

图论+DP,完全不会gg

出这么难的题是不是不缺人啊……

发布了377 篇原创文章 · 获赞 344 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/105018160