PAT-BASIC1064——朋友数

我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC

原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805267416334336

题目描述:

PAT-BASIC1064——朋友数

知识点:标记数组

思路:用一个大小为40的数组来标记该朋友证号是否出现过

时间复杂度是O(nlogn),其中n为朋友证号的个数,n最多等于36。空间复杂度是O(40)。

C++代码:

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

using namespace std;

int main() {
	int N;
	cin >> N;
	getchar();

	int flags[40];
	for(int i = 0; i < 40; i++) {
		flags[i] = 0;
	}

	char tempChar;
	int sum = 0;
	int count = 0;

	vector<int> friends;
	while((tempChar = getchar()) != '\n') {
		if(tempChar == ' ') {
			if(flags[sum] == 0) {
				flags[sum] = 1;
				count++;
				friends.push_back(sum);
			}
			sum = 0;
		} else {
			sum += (tempChar - '0');
		}
	}

	if(flags[sum] == 0) {
		flags[sum] = 1;
		count++;
		friends.push_back(sum);
	}

	cout << count << endl;

	sort(friends.begin(), friends.end());
	for(int i = 0; i < friends.size(); i++) {
		cout << friends[i];
		if(i != friends.size() - 1) {
			cout << " ";
		}
	}
}

C++解题报告:

PAT-BASIC1064——朋友数