1120 STL
題目大意: 若兩個(gè)數(shù)的數(shù)位上的數(shù)字加起來(lái)相等懊纳,則為朋友數(shù)。 例如:1+2+3 = 5+1 = 6茂缚,因此123和51是朋友數(shù)桐磁。給你一些數(shù)字,計(jì)算不同朋友數(shù)的值。
思路: 只需要計(jì)算不同朋友數(shù)的值互妓,因此每次先計(jì)算一下值,然后插入set就好啦坤塞。
#include<iostream>
#include<set>
using namespace std;
//計(jì)算數(shù)位和
int count(int x){
int sum = 0;
while( x!=0 ){
sum += x%10;
x = x/10;
}
return sum;
}
int main(){
int n;
cin>>n;
set<int> s;
for(int i=0;i<n;i++){
int x;
cin>>x;
s.insert(count(x));
}
cout<<s.size()<<endl;
set<int>::iterator iter;
for(iter = s.begin(); iter != s.end(); iter++){
if(iter != s.begin()){
cout<<" ";
}
cout<<*iter;
}
return 0;
}
1121 STL
be rounded to 四舍五入
題目大意: 給出所有情侶和參加派對(duì)的人冯勉,找出參加派對(duì)的人哪些是單身(情侶必須兩個(gè)人都到才可以) 。
思路: 考錄到用int會(huì)把0和00000混淆尺锚,所以還是用string吧 珠闰。對(duì)于每個(gè)輸入的樹,若這個(gè)人沒(méi)有情侶瘫辩,則一定單身伏嗜。若這個(gè)人有情侶坛悉,則存入set中,再查找他的情侶是否也來(lái)了承绸。
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
#include<string>
using namespace std;
int main(){
int n; //n<=50000,情侶總數(shù)
cin>>n;
map<string ,string> coupleList;
for(int i=0;i<n;i++){
string a,b;
cin>>a>>b;
coupleList[a] = b;
coupleList[b] = a;
}
int m; //<=10000,參加派對(duì)的人數(shù)
cin>>m;
set<string> option;
vector<string> ans;
for(int i=0;i<m;i++){
string x;
cin>>x;
if(coupleList[x] == ""){//若不存在
ans.push_back(x);
}else{
option.insert(x);
}
}
set<string>::iterator iter;
for(iter = option.begin(); iter != option.end(); iter++){
if(option.find(coupleList[*iter]) == option.end()){//若找不到
ans.push_back(*iter);
}
}
sort(ans.begin(), ans.end());
cout<<ans.size()<<endl;
for(int i=0;i<ans.size();i++){
if( i != 0){
cout<<" ";
}
cout<<ans[i];
}
return 0;
}
1122 哈密頓圖
題目大意: 哈密頓圈 :經(jīng)過(guò)圖中所有的節(jié)點(diǎn)的圈 裸影。給出一個(gè)無(wú)向圖,判斷給的圈是否是哈密頓圈军熏。
思路: 要判斷幾個(gè)點(diǎn):
- 是否是N+1個(gè)點(diǎn)轩猩。
- 結(jié)點(diǎn)編號(hào)是否在范圍內(nèi)
- 除起點(diǎn)外,每個(gè)點(diǎn)是否只出現(xiàn)了1次
- 經(jīng)過(guò)的邊是否存在
- 起點(diǎn)是否等于終點(diǎn)
#include<iostream>
#include<map>
using namespace std;
int main(){
int n, m;
cin>>n>>m;
int e[205][205];
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
e[a][b] = e[b][a] = 1;
}
int k;
cin>>k;
for(int i=0;i<k;i++){
int q;
cin>>q;
bool flag = true;
if(q != n+1) flag = false; //每個(gè)都遍歷一遍最終回到重點(diǎn)只能是N+1個(gè)點(diǎn)
int sst;
cin>>sst;
map<int ,int> mp;
int st,en;
st = sst;
for(int j=1;j<q;j++){
cin>>en;
if(en < 1 || en >n) flag = false; //結(jié)點(diǎn)編號(hào)不在范圍內(nèi)
mp[en]++;
if(mp[en]>1) flag = false; //初起點(diǎn)外荡澎,每個(gè)點(diǎn)有且只能出現(xiàn)一次
if(e[st][en] == 0) flag = false; //若這條邊不存在
st = en;
}
if(en != sst) flag = false; //若起點(diǎn)不等于終點(diǎn)
flag ? cout<<"YES"<<endl : cout<<"NO"<<endl ;
}
return 0;
}
1123 AVL樹 層次遍歷
題目大意: 按照插入順序輸入數(shù)字均践,輸出AVL樹的層次遍歷,并說(shuō)明他是不是一個(gè)完全二叉樹.
再見(jiàn)摩幔。