360笔试题--找老乡
来源:互联网 发布:java如何实现四舍五入 编辑:程序博客网 时间:2024/05/16 06:31
、
思路:先对每组人员进行比较,保证较小的编号在a组中,然后根据a组进行排序。设定一个标志位数组,对应的每一位代表人物编号,值就是是否与1号人物是老乡。具体见代码。
#include<iostream>using namespace std;int main(){int N,M;int count = 0;while(cin>>N>>M){//循环输入if(0==N&&0==M)break;if(0==N||0==M){cout<<count<<endl;continue;}int *a=new int[M];//人员aint *b=new int[M];//人员bbool *d=new bool[N+1];//标志位,下标对应人物编号,值为真时表示和一号人物是老乡for(int i=0;i<N+1;i++){d[i]=false;//标志位初始化为假}int temp = 0;for (int i =0;i<M;i++){cin>>a[i]>>b[i];if (a[i]>b[i]){//对应一组人员,保证人员编号小的在a组中,后面根据a组进行排序temp = a[i];a[i] = b[i];b[i] = temp;}int temp_a = a[i];int temp_b = b[i];int j;for (j=i-1;j>=0&&temp_a<a[j];j--){//根据a组进行插入排序a[j+1]=a[j];b[j+1]=b[j];}a[j+1]=temp_a;b[j+1]=temp_b;}if (a[0]!=1){//如果第0 位不是1号人物,那说名所有小组不会和1号人物有关系。cout<<count<<endl;continue;}else{d[a[0]]=true;}for(int i=0; i<M;i++){//a[i]和b[i]是对应的,只要a[i]对应的标志位d[a[i]是真 //则对应的d[b[i]]也是真。 //因为a[i]编号小于b[i],所以对于整个循环来看,是先遍历到d[a[i]].if(d[a[i]])d[b[i]]=true;}for (int i=2;i<N+1;i++){if(d[i])count++;}cout<<count<<endl;}return 0;}
0 0
- 360笔试题--找老乡
- 360笔试题 找老乡
- 360笔试--找老乡
- 360笔试题——找老乡
- 360笔试编程题 找老乡(BFS解法)
- 360笔试编程题 找老乡(并查集解法)
- 找老乡
- 找老乡
- 找老乡
- 找老乡
- 找老乡
- 找老乡 (sdut oj)
- sdut 找老乡
- SDUTOJ 3443 找老乡
- 认老乡 2016年360笔试题目 并查集
- 笔试题:360找镇长的题。
- 2016 360笔试题------找镇长
- 笔试题 -----找零钱
- C语言-九宫格
- thinkphp-关于模板里 IP 地址的引用实例
- 有关static 、const等关键字概念与区别
- 奇偶分割数组
- 《编程之美》小飞的电梯调度算法
- 360笔试题--找老乡
- UICollectionView使用实例(第三方类的使用及自定义UICollectionViewCell)
- Python中的编码
- for循环大括号使用注意
- cocos2d-x 瞬时动作
- objective-c复制
- Linux网络编程入门 (转载)
- Eclipse常用快捷键
- double check locking