原题链接:蓝桥杯历届试题-蚂蚁感冒
解题思路:如果输入-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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复