PAT乙-1087 有多少不同的值 (20分)
阿新 • • 發佈:2021-01-08
技術標籤:PAT乙
1087 有多少不同的值 (20分)
這道題目看上去有三種想法,第一種開陣列標記,第二種,利用MAP標記,第三種,利用SET標記;
方法1:
#include<iostream> #include<algorithm> using namespace std; #include<string> int main(){ int n; cin>>n; int a[100100]={0}; for(int i=1;i<=n;i++){ int c=i/2+i/3+i/5; a[c]++; } int count=0; for(int i=0;i<100100;i++){ if(a[i]) count++; } cout<<count<<endl; }
法2:利用MAP
#include<iostream>
#include<algorithm>
using namespace std;
#include<map>
#include<string>
int main(){
map<int,int> a;
int n;
cin>>n;
for(int i=1;i<=n;i++){
a[i/2+i/3+i/5]++;
}
cout<<a.size()<<endl;
}
方法3:set
#include<iostream> #include<algorithm> using namespace std; #include<map> #include<set> #include<string> int main(){ set<int> a; int n; cin>>n; for(int i=1;i<=n;i++){ a.insert(i/2+i/3+i/5); } cout<<a.size()<<endl; }