华为2014山东大学实习生上机考试

昨天华为来山大进行实习生上机考试,果断过去试了一下。题目不难,但是由于昨天紧张,没有全部做出来,今天早上总结了一下,发上来,大家参考参考,有更好的算法和答案,可以提出来大家一起交流。

第一题太过简单,就不发出来了,从第二道开始。

2.对一句话里面的单词进行reverse,标点符号位置不变。符号包括:,.!?

例:输入:Hello, my dear friend!

输出:olleH, ym raed dneirf!

以下就是我的个人简答:

#include 
#include 
#include
#include
using namespace std;

int main(){
	string str;
	stack a;
	getline(cin,str);
	int len=str.length();
	for(int i=0;i
第三道题:有一堆石子,石子数量大于2个。A和B轮流从里面取石子,A先取。第一次取石子的人不能全部取光。后一个人取的数量不能超过上一个人取的数量的2倍。取到最后一个石子的人获胜。石子数量是输入值,如果A获胜则输出2,A失败则输出1.。

例:输入:3

输出:1

我的个人解答:

#include
using namespace std;

int main(){
	int a;
	cin>>a;
	int sum=3;
	for(int i=2;;i++){
	if(sum == a){
		cout<<1;
		break;
	}
	else if(sum>a){
		cout<< 2;
		break;
	}
	sum+=i;
	}

	return 0;
}

对第三道题进行研究,就会发现,石子数量和A(也就是先取的人)是否获胜其实是由照斐波那契数列规律决定的。所以,只要对石子数量进行判断举行了。

昨天竟然没全部做出来。。太紧张了。。大家和什么个人见解可以提出来,大家一起讨论。


你可能感兴趣的:(算法题,csdn,华为,算法,博客)