题解 | 继续xxx定律(利用数组追溯关键字)

#include <iostream>
#include <vector>
using namespace std;
// 太小可能无法通过全部用例
#define MAX_SIZE 14000
// 获取关联数字的数组表
// -1表示当前数字为关键字,否则为非关键字
 vector<int> get_link_table(vector<int>& nums) {
	vector<int> link_table(MAX_SIZE,-1);
	for (int i = 0; i < nums.size(); i++) {
		int last = nums[i],next;
		while (last != 1) {
		  	// KY132 xxx定律要求
			if (last & 1)
				next = (last * 3 + 1) / 2;
			else
				next = last / 2;
			// 遇到历史访问过的数据立刻跳出循环
			if (link_table[next] != -1)
				break;
			else
				link_table[next] = last;
			last = next;
		}
	}
	return link_table;
}
 
int main() {
	int length;
	while (cin >> length) {
		if (length == 0)
			break;
		vector<int> nums(length),link_table;
		for (int i = 0; i < nums.size(); i++)
			cin >> nums[i];
		link_table = get_link_table(nums);
		for (int i = nums.size() - 1; i >= 0; i--) {
			if (link_table[nums[i]] == -1)
				cout << nums[i] << " ";
		}
		cout << endl;
	}
  	return 0;
}

全部评论

相关推荐

07-01 19:00
门头沟学院 Java
点赞 评论 收藏
分享
后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
无实习如何秋招上岸
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务