京东2016校园实习生招聘系统测试岗在线笔试编程题

试题一:复习安排

输入包含多组测试数据。首先输入一行包含两个数据复习的天数d和所用总时间sumtime。

接下来的d行,每一行含有两个数据,分别表示父亲希望儿子复习的时间的下线imintime和上限imaxtime。

儿子只记录了复习所用总时间数,但是为了向父亲汇报,他必须要汇报出每天安排的复习时间数,以完成父亲的要求,请帮助他设计每天复习的时间。

如果无法完成安排,则输出“No”;如果可以完成安排,则输出"Yes",并且输出安排每天复习的时间数。为了博得父亲的开心,他希望使得前期复习的时间数尽量多。

输入测试:

1 48

2 7

2 5

0 1

3 5

输出测试:

No

Yes

1 4

代码实现:

 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 struct Limit
 7 {
 8     int imintime;
 9     int imaxtime;
10 };
11 
12 typedef struct Limit limit;
13 
14 
15 int main()
16 {
17     int d, sumtime;
18     while (cin >> d >> sumtime)
19     {
20 
21     limit *num = new limit[d];
22     int totalmin = 0;
23     int totalmax = 0;
24     int left = sumtime;
25     vector<int> vec(d,0);
26     for (int i = 0; i<d; ++i)
27     {
28         cin >> num[i].imintime >> num[i].imaxtime;
29         totalmin += num[i].imintime;
30         totalmax += num[i].imaxtime;
31         vec[i] = num[i].imintime;
32         left -= vec[i];
33     }
34 
35 
36     int temp;
37     if (sumtime<totalmin || sumtime>totalmax)
38     {
39         cout << "No" << endl;
40         continue;
41     }
42     else if (sumtime >= totalmin&&sumtime <= totalmax)
43     {
44         for (int i = 0; i < d; ++i)
45         {
46             if (left>0)
47             {
48                 if (left >= num[i].imaxtime-num[i].imintime)
49                 {
50                     vec[i] = num[i].imaxtime;
51                     left = left-(num[i].imaxtime-num[i].imintime);
52                 }
53                 else
54                 {
55                     vec[i] += left;
56                     left = 0;
57                 }
58             }
59         }
60     }
61 
62     cout << "Yes" << endl;
63     for (int i = 0; i < vec.size(); i++)
64     {
65         if (i < vec.size() - 1)
66         {
67             cout << vec[i] << " ";
68         }
69         else
70             cout << vec[i] << endl;
71     }
72     }
73     system("pause");
74     return 0;
75 }

用例测试:

 

试题二:选举游戏

每一组测试数据包含两行,第一行只有一个数据d,表示候选人的总数。

第二行包含一组数据,表示这d个候选人当前的最大可能得票数。

其中这组数据的第一个是你本人的得票数,为了使得自己能够成功在本次选举中获胜(票数最高),请设计出你最少需要拉多少票,以及从每个其他候选人身上拉得的票数。

代码实现:

 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 
 7 int getmaxindex(vector<int> myvec)
 8 {
 9     int index = 0;
10     int max = 0;
11     for (int  i = 0; i < myvec.size(); i++)
12     {
13         if (myvec[i]>=max)
14         {
15             max = myvec[i];
16             index = i;
17         }
18     }
19     return index;
20 }
21 
22 int main()
23 {
24     int d;
25     cin >> d;
26     vector<int> vec(d, 0);
27     for (int  i = 0; i < d; i++)
28     {
29         cin >> vec[i];
30     }
31     int original = vec[0];
32     vector<int> original_vec(vec.begin(),vec.end());
33     while (1)
34     {
35         if (getmaxindex(vec) != 0)
36         {
37             vec[getmaxindex(vec)]--;
38             vec[0]++;
39         }
40         else
41             break;
42     }
43     cout << vec[0] - original << endl;
44 
45     for (int i = 1; i < d; i++)
46     {
47         if (i < d - 1)
48             cout << original_vec[i] - vec[i] << " ";
49         else
50             cout << original_vec[i] - vec[i] << endl;
51 
52     }
53 
54     system("pause");
55     return 0;
56 }

 

用例测试:

 

转载于:https://www.cnblogs.com/lou424/p/5374493.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值