【网易】牛客网2019校招真题(编程题)

【网易】被3整除

【题解】打表找规律,n为3的倍数和3的倍数余2的都是可以的,3的倍数余1的数是不可以的。

 1 #include
 2 using namespace std;
 3 int main()
 4 {
 5     int l,r,sum1,sum2;
 6     scanf("%d%d",&l,&r);
 7     l--;
 8     if(l%3==0)sum1=l/3*2;
 9     else if(l%3==2)sum1=((l+1)/3*2)-1;
10     else sum1=(l-1)/3*2;
11     if(r%3==0)sum2=r/3*2;
12     else if(r%3==2)sum2=((r+1)/3*2)-1;
13     else sum2=(r-1)/3*2;
14     printf("%d\n",sum2-sum1);
15 }
View Code

 

【网易】迷路的牛牛

【题解】简单模拟题。分类讨论即可。

【代码】

 1 #include
 2 using namespace std;
 3 int main()
 4 {
 5     int n;
 6     char s[1005];
 7     scanf("%d",&n);
 8     scanf("%s",s);
 9     char now='N';
10     for(int i=0;i)
11     {
12         if(now=='N')
13         {
14             if(s[i]=='L')now='W';
15             else now='E';
16         }
17         else if(now=='W')
18         {
19             if(s[i]=='L')now='S';
20             else now='N';
21         }
22         else if(now=='S')
23         {
24             if(s[i]=='L')now='E';
25             else now='W';
26         }
27         else
28         {
29             if(s[i]=='L')now='N';
30             else now='S';
31         }
32     }
33     printf("%c\n",now);
34 }
View Code

 

【网易】俄罗斯方块

【题解】记录一下每一列的方块的个数,最后取个最小值。

【代码】

 1 #include
 2 using namespace std;
 3 int main()
 4 {
 5     int n,m,a[1005];
 6     scanf("%d%d",&n,&m);
 7     int x;
 8     memset(a,0,sizeof(a));
 9     for(int i=1;i<=m;i++)
10     {
11         scanf("%d",&x);
12         a[x]++;
13     }
14     int ans=0x3f3f3f3f;
15     for(int i=1;i<=n;i++)
16     {
17         //printf("%d\n",a[i]);
18         ans=min(ans,a[i]);
19     }
20     printf("%d\n",ans);
21 }
View Code

 

【网易】安置路灯

【题解】贪心。每放置一个路灯,连续3个位置都能照亮,所以遇到一个“.”放一个路灯,后面两个位置即可跳过。

【代码】

 1 #include
 2 using namespace std;
 3 char s[1005];
 4 int main()
 5 {
 6     int T;
 7     scanf("%d",&T);
 8     while(T--)
 9     {
10         int n,i=0,ans=0;
11         scanf("%d",&n);
12         scanf("%s",s);
13         while(i<strlen(s))
14         {
15             if(s[i]=='.')
16             {
17                 ans++;
18                 i+=3;
19             }
20             else i++;
21         }
22         printf("%d\n",ans);
23     }
24 }
View Code

 

【网易】丰收

【题解】将每一堆苹果做一个前缀和,可以得出从左往右数前i堆苹果的总数sum[i],对于每一次询问,只需查找第一个大于等于q的sum,考虑时间需要用二分查找(自己手写或者lower_bound都可)。

【代码】

 1 #include
 2 using namespace std;
 3 const int maxn=1e5+5;
 4 int a[maxn],sum[maxn];
 5 int main()
 6 {
 7     int n;
 8     scanf("%d",&n);
 9     for(int i=1;i<=n;i++)
10     {
11         scanf("%d",&a[i]);
12         sum[i]=sum[i-1]+a[i];
13     }
14     int T;
15     scanf("%d",&T);
16     while(T--)
17     {
18         int q;
19         scanf("%d",&q);
20         int p=lower_bound(sum+1,sum+1+n,q)-sum;
21         printf("%d\n",p);
22     }
23 }
View Code

 

【网易】表达式求值

【题解】水题。总共6种情况,比较一下即可。

【代码】

 1 #include
 2 using namespace std;
 3 int main()
 4 {
 5     int a,b,c;
 6     scanf("%d%d%d",&a,&b,&c);
 7     int d=(a+b)*c;
 8     int e=a+b*c;
 9     int f=a*b+c;
10     int g=a*(b+c);
11     int h=a+b+c;
12     int j=a*b*c;
13     printf("%d\n",max(h,max(j,max(d,max(e,max(f,g))))));
14 }
View Code

 

【网易】牛牛的闹钟

【题解】水题。化成分钟比较好算,所需决定起床时间=到教室时间-起床时间,然后把闹钟的时间从大到小排个序,这样只要找到第一个小于等于所需决定起床时间即可。

 1 #include
 2 using namespace std;
 3 int a[105];
 4 bool cmp(int a,int b)
 5 {
 6     return a>b;
 7 }
 8 int main()
 9 {
10     int n,h,m,x;
11     scanf("%d",&n);
12     for(int i=0;i)
13     {
14         scanf("%d%d",&h,&m);
15         a[i]=h*60+m;
16     }
17     sort(a,a+n,cmp);
18     scanf("%d",&x);
19     scanf("%d%d",&h,&m);
20     int res=h*60+m-x;
21     for(int i=0;i)
22     {
23         if(a[i]<=res)
24         {
25             printf("%d %d\n",a[i]/60,a[i]%60);
26             return 0;
27         }
28     }
29 }
View Code

 

转载于:https://www.cnblogs.com/z1014601153/p/11157513.html

你可能感兴趣的:(【网易】牛客网2019校招真题(编程题))