输入公路的长度length,路灯个数number,随机生成路灯的位置,找到一对距离最长的路灯,在这对路灯中间安装一个新路灯,输出距离最远的两个路灯位置和距离,以及新路灯位置
package com.lll;
import java.util.Random;
import java.util.Scanner;
/**
* 输入公路的长度length,路灯个数number,随机生成路灯的位置,找到一对距离最长的路灯,在这对路灯中间安装一个新路灯
* 输出距离最远的两个路灯位置,以及新路灯位置
*/
public class StreetLightTest {
public static void main(String[] args) {
//程序输入
Scanner sc = new Scanner(System.in);
int length = sc.nextInt();
int number = sc.nextInt();
//生成个数为number的[0,length]范围的随机路灯位置,去重
int[] arr = new int[number];
Random random = new Random();
for (int i = 0; i < number; i++) {
//生成0-length的随机数
arr[i] = random.nextInt(length+1);
for(int j=0;j<i;j++){
// 通过比较数组存在中的数据,如果数据中有相同的数据,退出内层循环并且i--,就再重新生成一个随机数据,直到在数组中没有相同数据
if(arr[i]==arr[j]){
i--;
break;
}
}
}
//冒泡排序,逆序
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length - 1; j > i; j--) {
int temp = arr[i];
if (arr[i] < arr[j]) {
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//输出生成并排序后的位置数组
for (int i = 0; i < number; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
//循环查找相邻间距最大的两个路灯,以及距离
int max = 0;
int nearLight = 0;
int farLight = 0;
for (int i = 1; i < number; i++) {
int diff = arr[i-1] - arr[i];
if (diff > max){
max = diff;
nearLight = arr[i];
farLight = arr[i-1];
}
}
//输出最后结果
System.out.println("距离最远的两个路灯是"+nearLight+","+farLight+",距离是"+max);
System.out.println("新路灯的位置是"+(double)max/2);
}
}
这段 Java 代码是一个寻找最远路灯并在其之间安装新路灯的程序。
输入部分:
-
输入部分:
Scanner sc = new Scanner(System.in); int length = sc.nextInt(); int number = sc.nextInt();
这部分使用
Scanner
从控制台读取输入,获取了公路的长度length
和路灯的数量number
。 -
随机生成路灯位置:
int[] arr = new int[number]; Random random = new Random(); for (int i = 0; i < number; i++) { arr[i] = random.nextInt(length + 1); for (int j = 0; j < i; j++) { if (arr[i] == arr[j]) { i--; break; } } }
这部分随机生成了
number
个路灯的位置并存储在数组arr
中,要求路灯位置不重复。 -
排序路灯位置:
for (int i = 0; i < arr.length; i++) { for (int j = arr.length - 1; j > i; j--) { int temp = arr[i]; if (arr[i] < arr[j]) { arr[i] = arr[j]; arr[j] = temp; } } }
这部分使用冒泡排序对
arr
数组进行逆序排序,以便后续寻找相邻路灯之间的最大距离。 -
输出排序后的路灯位置:
for (int i = 0; i < number; i++) { System.out.print(arr[i] + " "); } System.out.println();
这部分输出排序后的路灯位置。
-
寻找最远的相邻路灯和计算距离:
int max = 0; int nearLight = 0; int farLight = 0; for (int i = 1; i < number; i++) { int diff = arr[i - 1] - arr[i]; if (diff > max) { max = diff; nearLight = arr[i]; farLight = arr[i - 1]; } }
这部分遍历数组找到相邻路灯之间距离最大的一对路灯,并记录下距离和这对路灯的位置。
-
输出结果:
System.out.println("距离最远的两个路灯是" + nearLight + "," + farLight + ",距离是" + max); System.out.println("新路灯的位置是" + (double) max / 2);
这部分输出找到的最远的两个路灯位置以及它们之间的距离,还输出了新路灯应该安装的位置。
总体而言,这个程序通过随机生成路灯位置,寻找相邻路灯间最大距离,然后在它们之间安装新路灯,最后输出结果。