1120 STL
题目大意: 若两个数的数位上的数字加起来相等,则为朋友数。 例如:1+2+3 = 5+1 = 6,因此123和51是朋友数。给你一些数字,计算不同朋友数的值。
思路: 只需要计算不同朋友数的值,因此每次先计算一下值,然后插入set就好啦。
#include<iostream>
#include<set>
using namespace std;
//计算数位和
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 四舍五入
题目大意: 给出所有情侣和参加派对的人,找出参加派对的人哪些是单身(情侣必须两个人都到才可以) 。
思路: 考录到用int会把0和00000混淆,所以还是用string吧 。对于每个输入的树,若这个人没有情侣,则一定单身。若这个人有情侣,则存入set中,再查找他的情侣是否也来了。
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
#include<string>
using namespace std;
int main(){
int n; //n<=50000,情侣总数
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,参加派对的人数
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 哈密顿图
题目大意: 哈密顿圈 :经过图中所有的节点的圈 。给出一个无向图,判断给的圈是否是哈密顿圈。
思路: 要判断几个点:
- 是否是N+1个点。
- 结点编号是否在范围内
- 除起点外,每个点是否只出现了1次
- 经过的边是否存在
- 起点是否等于终点
#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; //每个都遍历一遍最终回到重点只能是N+1个点
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; //结点编号不在范围内
mp[en]++;
if(mp[en]>1) flag = false; //初起点外,每个点有且只能出现一次
if(e[st][en] == 0) flag = false; //若这条边不存在
st = en;
}
if(en != sst) flag = false; //若起点不等于终点
flag ? cout<<"YES"<<endl : cout<<"NO"<<endl ;
}
return 0;
}
1123 AVL树 层次遍历
题目大意: 按照插入顺序输入数字,输出AVL树的层次遍历,并说明他是不是一个完全二叉树.
再见。
网友评论