网易内推笔试编程题合集(二)

2016/05/23 C和C++基础

不要二

二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。

对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:

**( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) **的算术平方根

小易想知道最多可以放多少块蛋糕在网格盒子里。

输入描述:

每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)

输出描述:

输出一个最多可以放的蛋糕数

输入例子:

3 2

输出例子:

4

#include <iostream>

using namespace std;

int main(){
	int w,h;
	while(cin>>w>>h){
		int sum=0;
		for(int i=0;i<w;i++){
			for(int j=0;j<h;j++){
				if((i%4==0||i%4==1)&&(j%4==0||j%4==1))
					sum++;
				if((i%4==2||i%4==3)&&(j%4==2||j%4==3))
					sum++;
			}
		}
		cout<<sum<<endl;
	}
}

解救小易

有一片1000*1000的草地,小易初始站在(1,1)(最左上角的位置)。小易在每一秒会横向或者纵向移动到相邻的草地上吃草(小易不会走出边界)。大反派超超想去捕捉可爱的小易,他手里有n个陷阱。第i个陷阱被安置在横坐标为xi ,纵坐标为yi 的位置上,小易一旦走入一个陷阱,将会被超超捕捉。你为了去解救小易,需要知道小易最少多少秒可能会走入一个陷阱,从而提前解救小易。

输入描述:

第一行为一个整数n(n ≤ 1000),表示超超一共拥有n个陷阱。

第二行有n个整数xi,表示第i个陷阱的横坐标

第三行有n个整数yi,表示第i个陷阱的纵坐标

保证坐标都在草地范围内。

输出描述:

输出一个整数,表示小易最少可能多少秒就落入超超的陷阱

输入例子:

3

4 6 8

1 2 1

输出例子:

3

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
	int n;
	while(cin>>n){
		vector<int> arr;
		int num;
		for(int i=0;i<n;i++){
			cin>>num;
			arr.push_back(num);
		}
		int temp;
		for(int i=0;i<n;i++){
			cin>>num;
			temp=arr[i]-1+num-1;
			arr[i]=temp;
		}
		sort(arr.begin(),arr.end());
		cout<<arr[0]<<endl;
	}
}

统计回文

“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。

例如:

A = “aba”,B = “b”。这里有4种把B插入A的办法:

  • 在A的第一个字母之前: “baba” 不是回文
  • 在第一个字母‘a’之后: “abba” 是回文
  • 在字母‘b’之后: “abba” 是回文
  • 在第二个字母’a’之后 “abab” 不是回文

所以满足条件的答案为2

输入描述:

每组输入数据共两行。

第一行为字符串A

第二行为字符串B

字符串长度均小于100且只包含小写字母

输出描述:

输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数

输入例子:

aba

b

输出例子:

2

#include <iostream>
#include <string>

using namespace std;

bool ishuiwei(string str,int len){
	int s=len/2;
	for(int i=0;i<s;i++){
		if(str[i]!=str[len-i-1])
			return false;
	}
	return true;
}

int main(){
	string str1,str2;
	while(cin>>str1>>str2){
		int len1=str1.length();
		int len=len1+str2.length();
		int sum=0;
		for(int i=0;i<=len1;i++){
			string temp=str1;
			temp.insert(i,str2);
			if(ishuiwei(temp,len))
				sum++;
		}
		cout<<sum<<endl;
	}
}

小易喜欢的单词

小易喜欢的单词具有以下特性:

1.单词每个字母都是大写字母

2.单词没有连续相等的字母

3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。

例如:

小易不喜欢”ABBA”,因为这里有两个连续的’B’

小易不喜欢”THETXH”,因为这里包含子序列”THTH”

小易不喜欢”ABACADA”,因为这里包含子序列”AAAA”

小易喜欢”A”,”ABA”和”ABCBA”这些单词,给你一个单词,你要回答小易是否会喜欢这个单词。

输入描述:

输入为一个字符串,都由大写字母组成,长度小于100

输出描述:

如果小易喜欢输出”Likes”,不喜欢输出”Dislikes”

输入例子:

AAA

输出例子:

Dislikes

#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <algorithm>

using namespace std;

int main(){
	string str;
	while(cin>>str){
		int lenstr=str.length();
	
		bool stoprun=false;                       //停止运行标志
		map<char,int> record;
		char pre;
		for(int i=0;i<lenstr;i++){
			if(i!=0){
				if(pre==str[i]){                  //判断是否连续重复
					cout<<"Dislikes"<<endl;
					stoprun=true;
					break;
				}
			}
			record[str[i]]++;
			pre=str[i];
		}

		if(!stoprun){
			string strrp;
			for(int i=0;i<lenstr;i++){             //把重复出现的字母取出
				if(record[str[i]]>=2)
					strrp=strrp+str[i];
			}

			int lenstrrp=strrp.length();
			int loop1=lenstrrp-4;
			int loop2=lenstrrp-3;
			int m=0;
			for(int i1=0;i1<=loop1;i1++){             //确定4个字母中的第一个字母
				for(int j=i1+1;j<=loop2;j++){         //确定4个字母中的第二个字母
					m=0;
					for(int k=j+1;k<lenstrrp;k++){
						if(strrp[k]==strrp[i1]&&m==0) //确定4个字母中的第三个字母
							m++;
						else if(strrp[k]==strrp[j]&&m==1){  //确定4个字母中的第四个字母
							cout<<"Dislikes"<<endl;
							stoprun=true;
							break;
						}
					}
					if(stoprun)
						break;
				}
				if(stoprun)
						break;
			}

			if(!stoprun)
				cout<<"Likes"<<endl;
		}
	}
}

Search

    Post Directory