解题思路:如果输入-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分
2 人评分
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:725 |
求圆的面积 (C语言代码)浏览:1269 |
C语言训练-数字母 (C语言代码)浏览:601 |
关于C语言变量位置的问题浏览:272 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:562 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:1916 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:485 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:521 |
C语言训练-斐波纳契数列 (C语言代码)浏览:505 |
整数分类 oj上总是wrong answer浏览:663 |