第一题:
标题:分机号
X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位。比如:
751,520,321 都满足要求,而,
766,918,201 就不符合要求。
现在请你计算一下,按照这样的规定,一共有多少个可用的3位分机号码?
请直接提交该数字,不要填写任何多余的内容。
手算得答案:8+7*2+6*3+5*4+4*5+3*6+2*7+1*8=120
int x=8+7*2+6*3+5*4+4*5+3*6+2*7+1*8;
System.out.println(x);
第二题:
标题:五星填数
如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
import java.util.Scanner;
public class Main {
static int sum=0;
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int[] arr={1,2,3,4,5,6,8,9,10,12};
p(arr,0);
System.out.println(sum/10);
}
public static void p(int[] ar,int k){//全排列
if(k==9){
pan(ar);
return;
}
for(int i=k;i<10;i++){
int t=ar[k];
ar[k]=ar[i];
ar[i]=t;
p(ar,k+1);
t=ar[k];
ar[k]=ar[i];
ar[i]=t;
}
}
public static void pan(int[] ar){//判断合格
int pa=ar[6]+ar[4]+ar[1]+ar[7];
if(ar[7]+ar[3]+ar[0]+ar[8]!=pa||ar[8]+ar[2]+ar[4]+ar[5]!=pa||ar[5]+ar[1]+ar[3]+ar[9]!=pa||ar[6]+ar[2]+ar[0]+ar[9]!=pa)
return;
else
sum++;
}
}
太简单,全排列加判断即可
第三题:
标题:显示二叉树
排序二叉树的特征是:
某个节点的左子树的所有节点值都不大于本节点值。
某个节点的右子树的所有节点值都不小于本节点值。
为了能形象地观察二叉树的建立过程,小明写了一段程序来显示出二叉树的结构来。
class BiTree
{
private int v;
private BiTree l;
private BiTree r;
public BiTree(int v){
this.v = v;
}
public void add(BiTree the){
if(the.v < v){
if(l==null) l = the;
else l.add(the);
}
else{
if(r==null) r = the;
else r.add(the);
}
}
public int getHeight(){
int h = 2;
int hl = l==null? 0 : l.getHeight();
int hr = r==null? 0 : r.getHeight();
return h + Math.max(hl,hr);
}
public int getWidth(){
int w = (""+v).length();
if(l!=null) w += l.getWidth();
if(r!=null) w += r.getWidth();
return w;
}
public void show(){
char[][] buf = new char[getHeight()][getWid