赛马周考6.9
发布于 2017-06-09 20:00 2440 次浏览 1 赞 来自 随便聊聊  

第一题:没什么好说的,直接模拟就可以,数据结构选用的是set,其他的也ok。

第二题:做过同类选择题(智力题),记住了思路,直接得到结果就可以了,当然,注意初始状态是关闭,这个很重要。

代码1:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <set>

int main()
{
	using namespace std;
	int n;
	while (cin >> n) {
		set<int> arr;
		for (int i = 0; i < n; i++) {
			arr.insert(i + 1);
		}
		set<int>::iterator iter = arr.begin();
		iter++;
		set<int>::iterator itor = iter;
		while (arr.size() > 2) {
			itor++;
			if (itor == arr.end()) {
				itor = arr.begin();
				itor++;
			}
			else if (++itor == arr.end()) {
				itor = arr.begin();
			}
			if(arr.size() > 3)
				cout << *iter << " ";
			else
				cout << *iter << endl;
			arr.erase(*iter);
			iter = itor;
		}
		if (iter == arr.begin()) {
			cout << *arr.begin() << " " << *arr.rbegin() << endl;
		}
		else {
			cout << *arr.rbegin() << " " << *arr.begin() << endl;
		}
	}
	return 0;
}

代码2:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

int main()
{
	using namespace std;
	long long n, l, r;
	while (cin >> n >> l >> r) {
		int temp = sqrt((double)l);
		long long i = temp * temp;
		long long ans = -1;
		if (i == l) {
			ans++;
		}
		while (i <= r) {
			ans++;
			temp++;
			i = temp * temp;
		}
		cout << r - l + 1 - ans << endl;
	}
	return 0;
}


2 条回复

大神啊,貌似我第一道题和第二道题的顺序是反过来的?

2017-06-14 13:36
Jimmy 回复 咕噜健

哦,那我还真不太清楚,以为所有人的顺序都是一样的,然后,并不是大神,只是个初学者渣渣,恰巧会做而已,哈哈

2017-06-14 23:22
添加回复
回到顶部