1. 程式人生 > >PAT-BASIC1069——微博轉發抽獎

PAT-BASIC1069——微博轉發抽獎

題目描述:

知識點:迴圈

思路:按題述程式設計即可

注意點:

題目裡說了——“可能有人轉發多次,但不能中獎多次,所以如果處於當前中獎位置的網友已經中過獎,則跳過他順次取下一位”。因此,中獎的索引不一定等於離第S位差N的整數倍

時間複雜度是O((M - S) / N)。空間複雜度是O(1)。

C++程式碼:

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

using namespace std;

int main() {
	int M, N, S;
	cin >> M >> N >> S;
	getchar();
	vector<string> winners;

	string tempName;
	string totalNames[M];
	for(int i = 0; i < M; i++) {
		getline(cin, tempName);
		totalNames[i] = tempName;
	}

	if(S - 1 >= M) {
		cout << "Keep going..." << endl;
		return 0;
	}
	int i = S - 1;
	while(i < M) {
		while(find(winners.begin(), winners.end(), totalNames[i]) != winners.end()) {
			i++;
			if(i >= M) {
				break;
			}
		}
		if(i < M) {
			winners.push_back(totalNames[i]);
		}
		i += N;
	}

	for(int i = 0; i < winners.size(); i++) {
		cout << winners[i] << endl;
	}


	return 0;
}

C++解題報告: