网易2019实习生招聘编程题

昨晚参加了网易2019实习生招聘的笔试,Unity开发岗,20道单选+2道简答+3道编程,很惭愧的3道编程题一道都没有AC,今天上牛客网看了下大神的解法,的确服气。

1.被3整除

链接:https://www.nowcoder.com/questionTerminal/51dcb4eef6004f6f8f44d927463ad5e8?orderByHotValue=1&questionTypes=000100&mutiTagIds=149&page=1&onlyReference=false
来源:牛客网

小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。

并且小Q对于能否被3整除这个性质很感兴趣。

小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。

输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。

输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
示例1
输入
2 5
输出
3
说明
12, 123, 1234, 12345…
其中12, 123, 12345能被3整除。

//在看了大神的解题思路之后,我的代码如下

#include
using namespace std;
int three(int x)
{
    return (x+2)/3;
}
int main()
{
    int a,b;
    while(cin>>a>>b)
    {
        cout<<(b-a+1)-(three(b)-three(a-1));
    }
}

本题的关键是找到区间[1,x]有多少个能被3整除的数
写出来当插入i以后的规律:
i = 1 —-> 1%3=1
i = 2 —-> 12%3=0
i = 3 —-> 123%3=0
i = 4 —-> 1234%3=1
i = 5 —-> 12345%3=0
i = 6 —-> 123456%3=0
i = 7 —-> 1234567%3=1
………………
可以发现从i=1开始,每3个i就有第一个i不能被3整除,我们假设区间[1,x]中x为第3n+1个i,则有n+1个数不可以被3整除,假设x为第3n+2个i,也是有n+1个数,3n+3也一样,综上,可得出在区间[1,x]有(x+2)/3个数不能被3整除!,所以,直接打印算出[l,r]中有几个数减去不能被3整除的有几个数即可!

2.牛牛的闹钟

链接:https://www.nowcoder.com/questionTerminal/9173e83d1774462f81255a26feafd7c6?orderByHotValue=1&questionTypes=000100&mutiTagIds=149&page=1&onlyReference=false
来源:牛客网

牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时间起床
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示闹钟的数量N(N<=100)。
接下来的N行每行包含两个整数,表示这个闹钟响起的时间为Hi(0<=A<24)时Mi(0<=B<60)分。
接下来的一行包含一个整数,表示从起床算起他需要X(0<=X<=100)分钟到达教室。
接下来的一行包含两个整数,表示上课时间为A(0<=A<24)时B(0<=B<60)分。
数据保证至少有一个闹钟可以让牛牛及时到达教室。

输出描述:
输出两个整数表示牛牛最晚起床时间。
示例1
输入
3
5 0
6 0
7 0
59
6 59
输出
6 0

本题算是比较简单的,在笔试的时候思路是正确的,但可能由于紧张还是怎样写出来的代码有太多冗余的地方,定义了太多数组导致AC不了,看了别人的代码之后发现,定义一个数组就够了,于是自己重写了下,过了,以下是我的代码:

#include
#include
using namespace std;
int main()
{
    int a[99];
    int n;
    int h,m;
    cin>>n;
    for(int i=0;icin>>h>>m;
        a[i]=h*60+m;
    }
    sort(a,a+n);//这里用到了sort函数
    int time;
    cin>>time;
    cin>>h>>m;
    int ltime;
    ltime=h*60+m;
    for(int i=n-1;i>=0;i--)
    {
        if((ltime-time)>=a[i])
        {
            cout<<(a[i]/60)<<" "<<(a[i]%60);
            break;
        }
    }
}

代码中用到了sort函数,其用法可戳c++ sort排序函数用法

你可能感兴趣的:(网易2019实习生招聘编程题)