蓝桥杯部分试题java_[蓝桥杯][历届试题]蚂蚁感冒 (Java代码)

解题思路:1.蚂蚁相遇后转向,可以看成是穿过去继续走,如图所示。

7d17c990e1afd50980b5d9b52e7452af.png2.因为是同速,不存在谁追上谁,所以若两只蚂蚁同一方向爬且不发生转向,它们是不会相遇的。竿子为100米其实没有用。

3.知道上述两点后,就知道:

(1)当首只蚂蚁向右走,则它右边所有向左蚂蚁都感冒;若它右边有向左蚂蚁感冒,则它左边所有向右蚂蚁都感冒。

(2)当首只蚂蚁向左走,则它左边所有向右蚂蚁都感冒;若它左边有向右蚂蚁感冒,则它右边所有向左蚂蚁都感冒。

可以画图看看的。

注意事项:

举个例子,所有蚂蚁都向右走,则感冒的蚂蚁只有首只蚂蚁,所以第3条(1)中,后半部分,只有满足“它右边有向左蚂蚁感冒”,“则它左边所有向右蚂蚁都感冒”。第3条(2)同

参考代码:

代码看着有点长,但需要理解的只有几行import java.util.Scanner;

public class Main {

public static int ab(int b) { //返回绝对值

if(b<0)

return -b;

else

return b;

}

public static void Main(String[] args) {

Scanner sc=new Scanner(System.in);

int n=sc.nextInt();

int a=sc.nextInt();

int sum=1,c=0;

boolean d=false;

for(int i=1;i

int b=sc.nextInt();

//第一种情况:

if(a>0){ //首只蚂蚁向右

if(ab(b)>a&&b<0){  //右边所有向左蚂蚁都感冒,有蚂蚁感冒则d变为true

d=true;

sum++; //sum:感冒蚂蚁个数

}

if(ab(b)0){  //当右边向左的蚂蚁有感冒(d=true)时,则左边所有向右蚂蚁都感冒,c最后

c++;  //c:左边向右蚂蚁个数                加入sum中;否则都不感冒,c就不用了

}

}

//第二种情况:

if(a<0){  //首只蚂蚁向左

if(ab(b)0){  //左边所有向右蚂蚁都感冒,有蚂蚁感冒则d变为true

d=true;

sum++;

}

if(ab(b)>-a&&b<0){  //当左边向右的蚂蚁有感冒(d=true)时,则右边所有向左蚂蚁都感冒,c最后

c++;          //加入sum中;否则都不感冒,c就不用了

}

}

}

sum=(d=true)?sum+c:sum; //当s=true时,加上c

System.out.println(sum);

sc.close();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值