我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED
原题链接:
PAT-BASIC1064:https://pintia.cn/problem-sets/994805260223102976/problems/994805267416334336
PAT-ADVANCED1120:https://pintia.cn/problem-sets/994805342720868352/problems/994805352925609984
题目描述:
PAT-BASIC1064:
PAT-ADVANCED1120:
知识点:标记数组
思路:用一个大小为37的数组来标记该朋友证号是否出现过
时间复杂度是O(nlogn),其中n为朋友证号的个数,n最多等于36。空间复杂度是O(37)。
C++代码:
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
int main(){
int friendID[37];
fill(friendID, friendID + 37, 0);
int N;
scanf("%d", &N);
char num[5];
for(int i = 0; i < N; i++){
scanf("%s", num);
int temp = 0;
for(int i = 0; i < strlen(num); i++){
temp += num[i] - '0';
}
friendID[temp] = 1;
}
int count = 0;
vector<int> result;
for(int i = 0; i < 37; i++){
if(friendID[i] == 1){
count++;
result.push_back(i);
}
}
printf("%d\n", count);
for(int i = 0; i < result.size(); i++){
printf("%d", result[i]);
if(i != result.size() - 1){
printf(" ");
}else{
printf("\n");
}
}
return 0;
}
C++解题报告: