网易2018年校园招聘编程题真题(魔法币&&相反数&&字符串碎片&&重排数列)

[编程题] 魔法币


小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币
魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币
小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币。 

输入描述:
输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。


输出描述:
输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符'1'和'2'。

输入例子1:
10

输出例子1:
122

我的代码:

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
	int n,m;
	cin>>n;
	string x;
	while(n!=0)
	{
		if(n%2==0)
		{
			x=x+"2";
			n=(n-2)/2;
		}
		else
		{
			x=x+"1";
			n=(n-1)/2;
		}
	}
	stringstream ss;
	ss<<x;
	m=x.length();
	char a[1001];
	ss>>a;
	while(m--) cout<<a[m];
	return 0;
}


[编程题] 相反数


为了得到一个数的"相反数",我们将这个数的数字顺序颠倒,然后再加上原先的数得到"相反数"。例如,为了得到1325的"相反数",首先我们将该数的数字顺序颠倒,我们得到5231,之后再加上原先的数,我们得到5231+1325=6556.如果颠倒之后的数字有前缀零,前缀零将会被忽略。例如n = 100, 颠倒之后是1. 

输入描述:
输入包括一个整数n,(1 ≤ n ≤ 10^5)


输出描述:
输出一个整数,表示n的相反数

输入例子1:
1325

输出例子1:
6556

我的代码:

#include<iostream>
using namespace std;
int main()
{
	int n,m,sum=0;
	cin>>n;
	m=n;
	while(m!=0)
	{
		sum=sum*10+m%10;
		m=m/10;
	}
	cout<<sum+n<<endl;
	return 0;
}


[编程题] 字符串碎片


一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:'aaa','bb','c'。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少。

输入描述:
输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s只含小写字母('a'-'z')


输出描述:
输出一个整数,表示所有碎片的平均长度,四舍五入保留两位小数。

如样例所示: s = "aaabbaaac"
所有碎片的平均长度 = (3 + 2 + 3 + 1) / 4 = 2.25

输入例子1:
aaabbaaac

输出例子1:
2.25

我的代码:

#include<iostream>
using namespace std;
int main()
{
	char a[1001];
	gets(a);
	int n,t=0,count=0,sum=0,i;
	for(i=0;a[i];i++)
	{
		t++;
		if(a[i]!=a[i+1])
		{
			sum=sum+t;
			count++;
			t=0;
		}
	}
	double sum1=sum,count1=count;
	printf("%.2f\n",sum1/count1);
	return 0;
}


[编程题] 重排数列


小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}。
牛博士给小易出了一个难题:
对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数。
小易现在需要判断一个数列是否可以重排之后满足牛博士的要求。 

输入描述:
输入的第一行为数列的个数t(1 ≤ t ≤ 10),
接下来每两行描述一个数列A,第一行为数列长度n(1 ≤ n ≤ 10^5)
第二行为n个正整数A[i](1 ≤ A[i] ≤ 10^9)


输出描述:
对于每个数列输出一行表示是否可以满足牛博士要求,如果可以输出Yes,否则输出No。

输入例子1:
2
3
1 10 100
4
1 2 3 4

输出例子1:
Yes
No

我的代码:

#include<iostream>
using namespace std;
int main()
{
	int n,m;
	cin>>n;
	while(n--)
	{
		int x,count1=0,count2=0;
		cin>>m;
		while(m--)
		{
			cin>>x;
			if(x%2==1)
				count1++;
			if(x%4==0)
				count2++;
		}
		if(count2>=count1)
			puts("Yes");
		else
			puts("No");
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值