朋友(friend.cpp)
Posted forever-chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了朋友(friend.cpp)相关的知识,希望对你有一定的参考价值。
题一:朋友(friend.cpp)
【题面】
同学们应该学会多交一些好朋友。朋友关系是相互的,A 是B 的好朋友,则B 也是A的好朋友。朋友关系是不传递的,A 是B 的好朋友,B 是C 的好朋友,但A 和C不一定是好朋友。现在给出某小学部分同学之间的朋友关系,请编程统计朋友最多的人有多少个好朋友。
【样式输入】
4 3
lucy lily
jam lily
jam peter
【样式输出】
2
- 【算法分析】
- 用类型为字符串(string)的变量统计每个人的名字和其的好友名称,用一个标记标记朋友之间的关系,统计出每个人朋友的数量,还要考虑数据重复,并进行处理,最后输出朋友数最多的人所拥有的朋友的数量
- 【数据范围约定】
- 50%以上的测试点输入数据保证朋友关系没有重复。 100%的测试点输入数据保证2≤n≤100,1≤m≤1000,且没有自己跟自己的朋友关系。
- 【AC代码】
#include<bits/stdc++.h>//文件操作用万能库,否则加cstdio
using namespace std;
int pos=0;//已有姓名的数量
string s[110];
int work(string x){
for(int i=1;i<=pos;i++){
if(x==s[i])
return i;//处理重复姓名,如姓名重复,则return返回其的下标,如s[1]中下标“1”,并在主程序中处理下标
}
s[pos]=x;
pos++;
return pos-1;
}
int main(){
freopen("friend.in","r",stdin);
freopen("friend.out","w",stdout);
int n,m,a[110],f[110][110];
string s1,s2;
memset(a,0,sizeof(a));//将a[]数组全部清零
memset(f,0,sizeof(f)); //将f[]数组全部清零
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>s1>>s2;
int k1=work(s1);//这个变量是s1在s中的下标是多少
int k2=work(s2); //这个变量是s2在s中的下标是多少
if(f[k1][k2]==0&&f[k2][k1]==0){//如果f[][]为零,则这对朋友之间的关系,没有在f[][]中记录,就将其记录一次
a[k1]++;
a[k2]++;
f[k1][k2]=1; //标记朋友关系是否记录
f[k2][k1]=1;
}
}
int ans=-1;
for(int i=1;i<=n;i++){
if(a[i]>ans)
ans=a[i];
}
cout<<ans<<endl;//输出朋友数最多的人所拥有的朋友的数量
return 0;
}
以上是关于朋友(friend.cpp)的主要内容,如果未能解决你的问题,请参考以下文章
Android课程---Android Studio使用小技巧:提取方法代码片段