第一题:
标题:三角形面积
已知三角形三个顶点在直角坐标系下的坐标分别为:
(2.3, 2.5)
(6.4, 3.1)
(5.1, 7.2)
求该三角形的面积。
注意,要提交的是一个小数形式表示的浮点数。
要求精确到小数后3位,如不足3位,需要补零。
就是普通的数学题,纯手算三分钟就Ok,答案就不贴出来了,算错了就反而尴尬了。
第二题:
标题:最大乘积
把 1~9 这9个数字分成两组,中间插入乘号,
有的时候,它们的乘积也只包含1~9这9个数字,而且每个数字只出现1次。
比如:
984672 * 351 = 345619872
98751 * 3462 = 341875962
9 * 87146325 = 784316925
...
符合这种规律的算式还有很多,请你计算在所有这些算式中,乘积最大是多少?
注意,需要提交的是一个整数,表示那个最大的积,不要填写任何多余的内容。
(只提交乘积,不要提交整个算式)
答案:839542176=96*8745231
import java.util.ArrayList;
public class Main{
static long max,x,y;
public static void main(String[] args)throws Exception{
int[] arr={1,2,3,4,5,6,7,8,9};
p(arr,0);
System.out.println(max);
System.out.println(x+" "+y);
}
public static void p(int[] arr,int pi) {//全排列
if(pi==9) {
pp(arr);
}
for(int i=pi;i<arr.length;i++) {
int t=arr[i];
arr[i]=arr[pi];
arr[pi]=t;
p(arr,pi+1);
t=arr[i];
arr[i]=arr[pi];
arr[pi]=t;
}
}
public static void pp(int[] arr) {
for(int i=1;i<5;i++) {//这个全排列取前i个数作为第一个数,后面为第二个数
int a=0,b=0;
for(int ii=0;ii<i;ii++) {
a=a*10+arr[ii];//数组变成数字的方法
}
for(int jj=i;jj<arr.length;jj++) {
b=b*10+arr[jj];
}
long ma=a*b;//这就是要判断的数
if(ma<123456789)//首先判断是否为9位数
continue;
char[] aa=String.valueOf(ma).toCharArray();
ArrayList<Character> al=new ArrayList<Character>();
for(int ii=0;ii<aa.length;ii++) {
if(al.contains(aa[ii]))
break;
al.add(aa[ii]);
}
if(al.size()!=9)//判断每个数字是否只出现一次
continue;
if(al.contains('0'))//判断数字里是否有0
continue;
if(max>ma)
continue;
max=ma;
x=a;
y=b;
}
}
}
这道题很简单
1.两个数自然必须保证正好是1到9九个数组合成的,减少循环次数
2.考虑两个数互换的重复问题,自然第一个数不能构造超过四位的数字,减少循环次数
第三题:
标题:全排列
对于某个串,比如:“1234”,求它的所有全排列。
并且要求这些全排列一定要按照字母的升序排列。
对于“1234”,应该输出(一共4!=24行):
1234
1243
1324
1342<