2018网易内推笔试编程题(一)
来源:互联网 发布:淘宝卖家借贷平台 编辑:程序博客网 时间:2024/05/16 12:47
萌新最近做了一下2018网易的内推编程题集合,要求3个小时解决八道编程题,本萌新两个小时做了6道题,剩下两道题直接放弃了,感觉难度不大,没有具体涉及到什么算法,除了动态规划。
下面对做题的思路以及过程做一个简单的记录:
1.彩色的砖块:
一些彩色的砖块。每种颜色由一个大写字母表示。各个颜色砖块看起来都完全一样。现在有一个给定的字符串s,s中每个字符代表小易的某个砖块的颜色。小易想把他所有的砖块排成一行。如果最多存在一对不同颜色的相邻砖块,那么这行砖块就很漂亮的。请你帮助小易计算有多少种方式将他所有砖块排成漂亮的一行。(如果两种方式所对应的砖块颜色序列是相同的,那么认为这两种方式是一样的。)
例如: s = “ABAB”,那么小易有六种排列的结果:
“AABB”,”ABAB”,”ABBA”,”BAAB”,”BABA”,”BBAA”
其中只有”AABB”和”BBAA”满足最多只有一对不同颜色的相邻砖块。
输入描述:
输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s中的每一个字符都为一个大写字母(A到Z)。
输出描述:
输出一个整数,表示小易可以有多少种方式。
解题思路:解题关键词:最多存在一对不同颜色的相邻砖块;即分为两种情况,(1)仅存在一对,那么该字符串仅有两种字母,形似XXXYYYY(2)不存在。那么就仅有一种字母
AC代码:
#include<iostream>#include<map>#include<string>using namespace std;int main(){ string str; map<char, int> ss; while(cin>>str){ for(int i = 0; i < str.length(); i++) ss[str[i]]++; if(ss.size()>2) cout<<"0"<<endl; else if(ss.size()==2) cout<<"2"<<endl; else cout<<"1"<<endl; }}
2. 等差数列
如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。
小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列
输入描述:
输入包括两行,第一行包含整数n(2 ≤ n ≤ 50),即数列的长度。
第二行n个元素x[i](0 ≤ x[i] ≤ 1000),即数列中的每个整数。
输出描述:
如果可以变成等差数列输出”Possible”,否则输出”Impossible”。
解题思路:根据等差数列的性质,该数列必是有序的,要么递增要么递减,要么就是常数列。对于此题,只需把数列排个序,相邻元素做差,只要差不等,即Impossible。
AC代码:
#include<stdio.h>#include<algorithm>using namespace std;#define N 50+5int main(){ int a[N],b[N],n; while(scanf("%d",&n)!=EOF){ for(int i=0; i<n; i++) scanf("%d",&a[i]); sort(a,a+n); for(int i=1;i<n;i++) b[i-1] = a[i]-a[i-1]; bool flag; flag = true; for(int i=0 ;i<n-2; i++) if(b[i+1] != b[i]) { flag = false; break; } if(flag) printf("Possible"); else printf("Impossible"); } return 0;}
3. 交错01串
如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: “1”,”10101”,”0101010”都是交错01串。
小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。
输入描述:
输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含’0’和’1’
输出描述:
输出一个整数,表示最长的满足要求的子串长度。
解题思路:这题和“最大连续子串和”类似,只不过更简单些。因为字符串仅有01,因此只需把后一个字符与前一个字符比较,不同的话,计数器累加,相同的话,更新子串长度值,并置计数器为0,重新计数
AC代码:
#include<stdio.h>#include<string>#include<algorithm>#include<iostream>using namespace std;#define Max 0xfffffint main(){ string str; while(cin>>str){ int count=0,max_len = -Max; for(int i=0; i<str.length();){ if(str[i+1] == str[i]){ if(count > max_len) max_len = count; count = 0; } else count++; i++; } if(count == str.length()) printf("%d",count); else printf("%d\n",max_len+1); } return 0;}
4. 操作序列
小易有一个长度为n的整数序列,a_1,…,a_n。然后考虑在一个空序列b上进行n次以下操作:
1、将a_i放入b序列的末尾
2、逆置b序列
小易需要你计算输出操作n次之后的b序列。
输入描述:
输入包括两行,第一行包括一个整数n(2 ≤ n ≤ 2*10^5),即序列的长度。
第二行包括n个整数a_i(1 ≤ a_i ≤ 10^9),即序列a中的每个整数,以空格分割。
输出描述:
在一行中输出操作n次之后的b序列,以空格分割,行末无空格。
解题思路:此题序列的长度长达2*10^5,肯定不能直接模拟来的。我们可以先按照题目要求写出前几项:我们可以发现规律:b序列总是从最大的位置以2为差递减到最小的位置,然后又以2为和递增到第二大的位置,由此不难写出AC代码
AC代码
#include<stdio.h>#define N 200000+5int a[N],b[N];int main(){ int n; while(scanf("%d", &n) != EOF){ for(int i=1; i<=n; i++) scanf("%d",&a[i]); int num = 1; for(int i=n; i>=1;){ b[num++] = a[i]; i -= 2; } int j; if(n & 1) //分奇偶两种情况 j = 2; else j = 1; for( ; j < n; ){ b[num++] = a[j]; j += 2; } for(int k=1; k<=n; k++){ if(k != n) printf("%d ",b[k]); else printf("%d\n",b[k]); } } return 0;}
5. 独立的小易
小易为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间。一个人生活增加了许多花费: 小易每天必须吃一个水果并且需要每天支付x元的房屋租金。当前小易手中已经有f个水果和d元钱,小易也能去商店购买一些水果,商店每个水果售卖p元。小易为了表现他独立生活的能力,希望能独立生活的时间越长越好,小易希望你来帮他计算一下他最多能独立生活多少天。
输入描述:
输入包括一行,四个整数x, f, d, p(1 ≤ x,f,d,p ≤ 2 * 10^9),以空格分割
解题思路:此题是到简单的数学题,我们要先判断手中的d元钱够不够支付f天(每天一个苹果嘛)的房租,不够的话那就没有继续下去的必要了。k = d - f*x 。如果k<=0 那么最大只能活 min(f, d/x)天咯。k>0的话,那就用剩下的钱买苹果交房租咯,即m*(p+x)=k,求m.
AC代码:
#include<iostream>#include<algorithm>using namespace std;int main(){ long long x, f, d, p; while(cin>>x>>f>>d>>p){ int m,n=0,k; k = d - x*f; n = min(d/x, f); if(k <= 0){ cout<< n <<endl; } else{ cout<< n+k/(p+x)<<endl; } } return 0;}
- 2018网易内推笔试编程题(一)
- 2018网易内推笔试编程题(二)
- 2016网易内推笔试编程题合集(一)
- 藏宝图----网易2017内推笔试编程题合集(一)
- 【牛客网】网易2017内推笔试编程题合集(一)
- 【网易2017内推笔试编程题】
- 网易内推笔试编程题2
- 网易2017内推笔试编程题(合集)
- 2018网易内推笔试
- 网易内推笔试题
- 星际穿越----网易2017内推笔试编程题合集(一)
- 分苹果----网易2017内推笔试编程题合集(一)
- 网易内推笔试编程题-字符串子序列判断
- 2016网易内推笔试编程题-3
- 2017网易有道内推笔试编程题1:洗牌
- 2017年网易内推笔试编程题1
- 【牛客网】网易2017内推笔试编程题合集(二)
- 网易牛客网2018内推编程题
- StartSSL 免费证书申请步骤以及Tomcat和Apache下的安装
- maven加载不到配置文件
- JQuery插件(二)之Accordion
- Masonry 简易教程(没了解过的可以直接闪人了,主要是为了了解所有的API)
- 31. Next Permutation
- 2018网易内推笔试编程题(一)
- SecureCRT常用命令
- MUI使区域滚动的滚动条消失的办法
- python sys.argv[]用法
- 《利用python进行数据分析》学习笔记(二)4.3 通用函数 4.4 利用数组进行数据处理
- CentOS7 MIN 安装 Redis
- CentOS6.9用rpm安装MySQL5.7
- Java Security:Java加密框架(JCA)简要说明
- HDU 2188-悼念512汶川大地震遇难同胞——选拔志愿者