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

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

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

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

例:输入:Hello, my dear friend!

输出:olleH, ym raed dneirf!

以下就是我的个人简答:

#include <stack>
#include <cstdio>
#include<iostream>
#include<string>
using namespace std;

int main(){
	string str;
	stack<char> a;
	getline(cin,str);
	int len=str.length();
	for(int i=0;i<len;i++){
		if(str[i]==' '||str[i]==','||str[i]=='.'||str[i]=='?'||str[i]=='!'||str[i]=='\n'){
		string word="";
		while(!a.empty()){
			char ch=a.top();
			a.pop();
			word+=ch;
		}
		int wordlen=word.length();
		str.replace(i-wordlen,wordlen,word);
		}else{
			a.push(str[i]);
		}
	}
	cout<<str<<endl;

return 0;
}
第三道题:有一堆石子,石子数量大于2个。A和B轮流从里面取石子,A先取。第一次取石子的人不能全部取光。后一个人取的数量不能超过上一个人取的数量的2倍。取到最后一个石子的人获胜。石子数量是输入值,如果A获胜则输出2,A失败则输出1.。

例:输入:3

输出:1

我的个人解答:

#include<iostream>
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(也就是先取的人)是否获胜其实是由照斐波那契数列规律决定的。所以,只要对石子数量进行判断举行了。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值