原题链接:蓝桥杯历届试题-蚂蚁感冒
解题思路:如果输入-10 8 -20 12 25
-10 | 8 | -20 | 12 | 25 |
10 | 8 | 20 | 12 | 25 |
8 | 10 | 12 | 20 | 25 |
8 | -10 | 12 | -20 | 25 |
感冒的蚂蚁所在位置 |
第一行表格,把你输入的数据放入arr
第二行:把数据变为正数,方便排序
第三行:排序,为了知道感冒体的位置
第四行:把蚂蚁的方向再标记出来,得知感冒体的位置。
注意事项:
自己画图思考一下,当第一个感冒的蚂蚁初始向左时,如果左边有和它相反方向的蚂蚁,会不会都感冒,会的!那么掉头之后,右边如果有相反方向的蚂蚁,会不会都感冒?答案也是会的。反之亦然。自己想想哦。
参考代码:
Scanner in=new Scanner(System.in); int n=in.nextInt();//蚂蚁的个数 int arr[]=new int[n];//用一个数组来存放数据 int brr[]=new int[n];//用另一个数组来存放负数 int num=0;//用num来存放arr[0]也就是感冒的那个数 for(int i=0;i<n;i++) { arr[i]=in.nextInt(); if(i==0) { num=arr[i]; } if(arr[i]<0) //把arr[i]中的数全变为正数 { brr[i]=arr[i]; arr[i]=-arr[i]; } } Arrays.sort(arr);//把arr中的数据排序一下,知道距离 for(int i=0;i<n;i++) //相当于给arr数组中的蚂蚁,把方向添加一下 { for(int j=0;j<n;j++) { if(arr[i]==-brr[j]) { arr[i]=-arr[i]; } } } int wei=0; for(int i=0;i<n;i++) //把感冒的蚂蚁排在第几个给wei { if(num==arr[i]) wei=i; } int count=1; if(num<0)//如果蚂蚁初始方向是向左 { for(int i=0;i<wei;i++) { if(arr[i]>0) //因为感冒会掉头,感冒蚂蚁左边只要有向右的,一定被感染,所以count++ { count++; } } for(int i=wei+1;i<n;i++) { if(count>=2)//当蚂蚁掉头的时候,count肯定大于2的,所以这个时候才会计算右边的情况 { if(arr[i]<0) count++; } } } if(num>0) { for(int i=wei+1;i<n;i++) { if(arr[i]<0) { count++; } } for(int i=0;i<wei;i++) { if(count>=2) { if(arr[i]>0) { count++; } } } } System.out.println(count); } }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复