朋友(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使用小技巧:提取方法代码片段

web前端开发JQuery常用实例代码片段(50个)

谷歌丰富的片段不工作

Kotlin 相同片段多个活动

Android:当用户在导航组件、单活动应用程序中回击片段 B 时更新片段 A

片段在较低版本的android中无法正常工作