深信服 2019校园招聘 研发试卷-2018.09.21

版权声明:本人ZZU在校学生,文章均为个人心得,有不足之处请不吝赐教! https://blog.csdn.net/whl_program/article/details/82808108

就做出来一道题,惭愧
1-1.png
1-2.png
1-3.png
2-1.png
2-2.png
2-3.png
感觉样例第三个有问题
1 2 3 3 6 9 我觉得应该输出1 1,可样例输出UNKNOWN
以下是错误代码,0%
实在找不到问题,,,GG

#include <iostream>

using namespace std;

int main()
{
    int T;
    cin >> T;
    for(int i=0; i<T; i++){
        float a1, b1, v1, a2, b2, v2, x, y;
        cin >> a1 >> b1 >> v1 >> a2 >> b2 >> v2;
        if(a1+b1 == v1 && a2+b2 == v2){
            cout << 1 << " " << 1 << endl;
            continue;
        }
        x = (v1-b1/b2*v2)/(a1-b1/b2*a2);
        y = (v2-a2*x)/b2;
        if(x >= 0 && x <= 1000000000 && y >= 0 && y <= 1000000000
           && x-(int)x == 0 && y-(int)y == 0){
            cout << x << " " << y << endl;
            continue;
        }
        cout << "UNKNOWN" << endl;
        //cout << x << " " << y << endl;
    }
    return 0;
}

3-1.png
3-2.png
3-3.png
3-4.png
求最小连续子序列和,DP思想

#include <bits/stdc++.h>
#define MAX 10000005
// A[i] 存放序列,dp[i] 存放以 A[i] 为结尾的连续序列的最大和
int A[MAX], dp[MAX];
// 求较大值
int min(int a, int b) {
    return a<b ? a : b;
}
int main() {
    int T, i, res;
    scanf("%d", &T);
    for(i=0; i<T; ++i) {        // 输入序列
        scanf("%d", &A[i]);
    }
    dp[0] = A[0];                // 边界
    for(i=1; i<T; ++i) {
        // 状态转移方程
        dp[i] = min(A[i], dp[i-1] + A[i]);
    }
    // 求最大连续子序列和
    res = dp[0];
    for(i=1; i<T; ++i) {
        if(dp[i] < res) {
            res = dp[i];
        }
    }
    printf("%d\n", res);        // 输出
    return 0;
}

4-1.png
4-2.png
4-3.png
4-4.png

猜你喜欢

转载自blog.csdn.net/whl_program/article/details/82808108