1.给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
算法思路:如果数组中数字都为正,直接排序输出最大的三个值的乘积;如果数组中数字有两个或者两个以上负数,则输出最小的两个负数和最大的正数的乘积。
排序方法:Arrays.sort(数组名);
具体代码如下
————————————————
import java.util.Arrays;
import java.util.Scanner;
public class T2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入数组长度");
int n=sc.nextInt();
int[] nums=new int[n];
for(int i=0;i<n;i++) {
System.out.println("请输入第"+(i+1)+"个数的值");
int a=sc.nextInt();
nums[i]=a;
}
jiexi(nums);
}
private static int jiexi(int[] nums) {
Arrays.sort(nums);
int a=nums.length;
int max = Math.max(nums[0]*nums[1]*nums[a-1],nums[a-1]*nums[a-2]*nums[a-3]);
System.out.println(max);
return 0;
}
}
示例:
输入:nums = [1,2,3]
输出:6
2.约瑟夫环
示例题目:n个人(0,1,2,3,4...n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,...m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m,
请你求出大王的编号。
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
思路:键盘输入m,n,k,令剩余的人数最开始等于总人数,令数组中的值为0,当报数的人的数组值为1时,淘汰改人。然后j归零,重新开始循环。
————————————————
import java.util.Scanner;
public class T3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入总人数");
int n=sc.nextInt();
System.out.println("请输入从编号为"+"的人开始报数");
int k=sc.nextInt();
System.out.println("请输入出队的人的序号");
int m=sc.nextInt();
int []arr=new int[n];
int x=n;//剩余的人数
int j=0;//第一个开始报数的人
while(x>1) {
if(k==n)
k=0;//限制范围
if(arr[k]==0) {
j++;
if(j==m) {
//当到达m个人时,令该位置数组的值等于1
arr[k]=1;
x--;
j=0;
}
}
k++;
}
for(int a=0;a<n;a++) {
if(arr[a]==0) {
System.out.println(a);
break;
}
}
}
}
示例:
输入:5,1,2
输出:3