校招全国统一模拟笔试(五月场)

1.牛牛的快递到了,他迫不及待地想去取快递,但是天气太热了,以至于牛牛不想在烈日下多走一步。他找来了你,请你帮他规划一下,他最少要走多少距离才能取回快递。
输入描述:
每个输入包含一个测试用例。
输入的第一行包括四个正整数,表示位置个数N(2<=N<=10000),道路条数M(1<=M<=100000),起点位置编号S(1<=S<=N)和快递位置编号T(1<=T<=N)。位置编号从1到N,道路是单向的。数据保证S≠T,保证至少存在一个方案可以从起点位置出发到达快递位置再返回起点位置。
接下来M行,每行包含三个正整数,表示当前道路的起始位置的编号U(1<=U<=N),当前道路通往的位置的编号V(1<=V<=N)和当前道路的距离D(1<=D<=1000)。
输出描述:
对于每个用例,在单独的一行中输出从起点出发抵达快递位置再返回起点的最短距离。
输入例子1:
3 3 1 3
1 2 3
2 3 3
3 1 1
输出例子1:
7

2.牛牛得知了一些股票今天买入的价格和明天卖出的价格,他找犇犇老师借了一笔钱,现在他想知道他最多能赚多少钱。
输入描述:
每个输入包含一个测试用例。
输入的第一行包括两个正整数,表示股票的种数N(1<=N<=1000)和牛牛借的钱数M(1<=M<=1000)。
接下来N行,每行包含两个正整数,表示这只股票每一股的买入价X(1<=X<=1000)和卖出价Y(1<=Y<=2000)。
每只股票可以买入多股,但必须是整数。
输出描述:
输出一个整数表示牛牛最多能赚的钱数。
输入例子1:
3 5
3 6
2 3
1 1
输出例子1:
4
思路:1.每种股票可以购多次,动态求最大利润==》完全背包问题。
2.利润=Y-X。作为value。如果以Y作为value,最后结果为总收入,需要减去支出,但是并没有要求M一定用完,所以不好求解。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n, m;
    cin >> n >> m;
    int *X = new int[n + 1]();
    int *Y = new int[n + 1]();
    int *M = new int[m + 1]();
    for (int i = 1; i <= n; ++i)
    {
        cin >> X[i] >> Y[i];
        Y[i] = Y[i] - X[i];//利润
    }
    for (int i = 1; i <= n; ++i)
        for (int j = X[i]; j <= m; ++j)
            M[j] = max(M[j], M[j - X[i]] + Y[i]);
    cout<<M[m]<<endl;
    delete X, Y, M;
    system("pause");
    return 0;
}

3.小牛牛为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间。
一个人生活增加了许多花费: 牛牛每天必须吃一个水果并且需要每天支付x元的房屋租金。
当前牛牛手中已经有f个水果和d元钱,牛牛也能去商店购买一些水果,商店每个水果售卖p元。
牛牛为了表现他独立生活的能力,希望能独立生活的时间越长越好,牛牛希望你来帮他计算一下他最多能独立生活多少天。

输入描述:
输入包括一行,四个整数x, f, d, p(1 <= x,f,d,p <= 2 * 10^9),以空格分割
输出描述:
输出一个整数, 表示牛牛最多能独立生活多少天。
输入例子1:
3 5 100 10
输出例子1:
11

思路:1.水果足够多,只需要考虑房租即可;2.水果足够少,需要考虑房租和水果。

#include<iostream>
using namespace std;
void day_live(int x,int f,int d,int p)
{
// d-f*x 是判断水果是不是足够多。>=0则表示水果足够少仍有剩余的钱,<0表示水果足够多
    int day=d-f*x>=0 ? f+(d-f*x)/(x+p) : d/x;
    cout<<day<<endl;
}
int main()
{
    int x,f,d,p;
    cin>>x>>f>>d>>p;
    day_live(x,f,d,p);
    return 0;
}


import sys
data=sys.stdin.readline().strip().split()
x=int(data[0])
f=int(data[1])
d=int(data[2])
p=int(data[3])
day_live=0
if (d-f*x)>=0:
    day_live=f+(d-f*x)/(x+p)
else:
    day_live=d/x
 print day_live       

4最近天气太热了,牛牛每天都要吃雪糕。雪糕有一盒一份、一盒两份、一盒三份这三种包装,牛牛一天可以吃多盒雪糕,但是只能吃六份,吃多了就会肚子疼,吃少了就会中暑。而且贪吃的牛牛一旦打开一盒雪糕,就一定会把它吃完。请问牛牛能健康地度过这段高温期么?
输入描述:
每个输入包含多个测试用例。
输入的第一行包括一个正整数,表示数据组数T(1<=T<=100)。
接下来N行,每行包含四个正整数,表示高温期持续的天数N(1<=N<=10000),一盒一份包装的雪糕数量A(1<=A<=100000),一盒两份包装的雪糕数量B(1<=B<=100000),一盒三份包装的雪糕数量C(1<=A<=100000)。
输出描述:
对于每个用例,在单独的一行中输出结果。如果牛牛可以健康地度过高温期则输出”Yes”,否则输出”No”。
输入例子1:
4
1 1 1 1
2 0 0 4
3 0 2 5
4 24 0 0
输出例子1:
Yes
Yes
No
Yes

思路:3份雪糕,一天2块;2份雪糕,一天3块;1块雪糕,一天6块。
step1:先吃3份雪糕的
step2:吃2份雪糕的
step3:3份雪糕的,2份雪糕的,1份雪糕的组合
step4:3份雪糕的,1份雪糕的
step5:2份雪糕的,1份雪糕的
step6:1份雪糕的

import sys
data=sys.stdin.readline().strip().split()
t = int(data[0])
while t:
    data = sys.stdin.readline().strip().split()
    if len(data) == 4:
        t=t-1
        day = int(data[0])
        one = int(data[1])
        two = int(data[2])
        three = int(data[3])

        day = day - three/2
        three = three % 2
        day = day - two / 3
        two = two % 3

        if three==1 and two >= 1 and one >=1:
            day = day - 1
            three = three - 1
            two = two - 1
            one = one - 1
        if three==1 and one>=3:
            day = day -1
            three = 0
            one =one -3
        if two==2  and one >=2:
            day =day-1
            two=0
            one=one -2
        if two == 1 and one >=4:
            day = day - 1
            two = 0
            one = one - 4
        day = day -one/6
        one = one %6
        if day >0:
            print "No"
        else:
            print "Yes"

5牛牛在地上捡到了一个手套,他带上手套发现眼前出现了很多个小人,当他打一下响指,这些小人的数量就会发生以下变化:如果小人原本的数量是偶数那么数量就会变成一半,如果小人原本的数量是奇数那么数量就会加一。现在牛牛想考考你,他要打多少次响指,才能让小人的数量变成1。
输入描述:
每个输入包含一个测试用例。
输入的第一行包括一个正整数,表示一开始小人的数量N(1<=N<=10^100)。
输出描述:
对于每个用例,在单独的一行中输出牛牛需要打多少次响指才能让小人的数量变成1。
输入例子1:
10000
输出例子1:
20

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值