奇安信笔试,第一题和第二题的原本题意

第一题说是只能用1块,两块,3块(我fo了),我后面差一点猜对了(苦笑),ac 0
#include<iostream>
#include<vector>
using namespace std;
int CalulateMethodCount(int num_money);
int main() {
	int num_money;
	cin >> num_money;
	cout << CalulateMethodCount(num_money) << endl;
	return 0;
}
int CalulateMethodCount(int num_money) {
	// write code here
	//dp[i]表示采用1,2,...,n-1发送奖金的发放种类数
	//注意:先发1再发2 先发2再发1是两种方法
	/*vector<int> dp(num_money + 1, 0);
	dp[0] = 1;
	for (int i = 1; i <= num_money; ++i) {
		for (int money = 1; money <= i; ++money) {
			dp[i] += dp[i - money];
		}
	}
	return dp.back(); */
        //return  pow(2,num_money-1);
	//原来只能用1、2和n吗?
	//n只能最后一次用
	if (num_money == 1) return 1;
	if (num_money == 2) return 2;
	vector<int> dp(num_money + 1, 0);
	dp[0] = 1; dp[1] = 1; dp[2] = 2;
	for (int i = 2; i <= num_money; ++i) {
		dp[i] = dp[i - 1] + dp[i - 2];
	}
	return dp[num_money] + 1;
}        
第二题我猜测如果redo前面不是undo,则恢复了个“寂寞”,ac1
#include<iostream>
#include<vector>
#include<string>
#include<stack>
using namespace std;
int main() {
	string cur;
	stack<string> del;
	vector<string> save;
	while (cin >> cur) {
		if (cur == "undo") {//撤销
			if (save.empty()) continue;//无字符串可以撤销
			cur = save.back();
			save.pop_back();
			del.push(cur);
		}
		else if (cur == "redo") {//恢复
			if (del.empty()) continue;//无撤销的字符串可以恢复
			cur = del.top();//此时del不应该为空
			del.pop();
			save.push_back(cur);
		}
		else {
			save.push_back(cur);
			while (not del.empty()) del.pop();//如果前一个不是撤销则恢复“空气”
		}
	}
	for (int i = 0; i < save.size(); ++i) {
		cout << save[i] << " ";
	}

	return 0;
}


#笔试题目##奇安信#
全部评论
题目一句话,条件全靠猜
2 回复
分享
发布于 2020-08-16 17:24
题目描述  按正常人的理解,测试用例有问题啊
1 回复
分享
发布于 2020-08-16 17:15
阅文集团
校招火热招聘中
官网直投
真的佛了,感觉都不难,很快九所完了然后第一题一直0,跳台阶2的n-1次方都用了,都不对,就交了,我这还没有自我调试
点赞 回复
分享
发布于 2020-08-16 17:08
第二题你这种写法能跳出while(cin>>cur)吗?我咋跳不出去。 😂
点赞 回复
分享
发布于 2020-08-16 17:29
你的第二题AC了吗?
点赞 回复
分享
发布于 2020-08-16 17:34
啊。。我理解的这次redo撤销上一次undo的操作,没考虑你说的前面不是undo的情况,只有0.4,佛了。。。
点赞 回复
分享
发布于 2020-08-16 17:39

相关推荐

2 5 评论
分享
牛客网
牛客企业服务