蓝桥杯练习系统基础练习答案(含VIP试题)

 

目录

BASIC-01    A+B问题

BASIC-02    序列求和 

 BASIC-03    圆的面积

 BASIC-04    Fibonacci数列

BASIC-1    闰年判断

 BASIC-2    01字串

 BASIC-3    字母图形

 BASIC-4    数列特征

 BASIC-5    查找整数

BASIC-6    杨辉三角形

 BASIC-7    特殊的数字

BASIC-8    回文数

 BASIC-9    特殊回文数

 BASIC-10    十进制转十六进制

 BASIC-11    十六进制转十进制

 BASIC-12    十六进制转八进制

 BASIC-13    数列排序

BASIC-14    VIP试题 时间转换

 BASIC-15    VIP试题 字符串对比

 BASIC-16    VIP试题 分解质因数

 BASIC-17    VIP试题 矩阵乘法

 BASIC-18    VIP试题 矩形面积交

 BASIC-19    VIP试题 完美的代价

 BASIC-20    VIP试题 数的读法

  BASIC-22    VIP试题 FJ的字符串

 BASIC-23    VIP试题 芯片测试

 BASIC-24    VIP试题 龟兔赛跑预测

 BASIC-25    VIP试题 回形取数

 BASIC-26    VIP试题 报时助手

 BASIC-28    VIP试题 Huffuman树

 BASIC-29    VIP试题 高精度加法

 BASIC-30    VIP试题 阶乘计算


OJ链接:.page?code=BASIC-&userid=301077

       虽然大三了,对算法掌握的不是很好,这些题的我的解题思路大部分都是比较常规的解法,没有涉及到数据结构和复杂算法,希望能帮助到大家。类名以题目和题号命名,思路写在注释,AC代码依次如下。

BASIC-01    A+B问题

package 蓝桥杯系统入门训练;import java.util.*;
public class A加B问题{public static void main(String[] args) {Scanner sc = new Scanner(System.in);Integer a = sc.nextInt();Integer b = sc.nextInt();System.out.println(a + b);}
}

BASIC-02    序列求和 

package 蓝桥杯系统入门训练;import java.util.Scanner;public class 入门训练_序列求和 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);long n = sc.nextInt();System.out.println((1+n)*n/2);//n很大时,用循环做会超时!}
}

 BASIC-03    圆的面积

package 蓝桥杯系统入门训练;import java.util.Scanner;public class 入门训练_圆的面积 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);double r = sc.nextDouble();System.out.printf("%.7f",Math.PI*r*r);//3.1415926535}
}

 BASIC-04    Fibonacci数列

package 蓝桥杯系统入门训练;import java.util.Scanner;public class 入门训练_Fibonacci数列 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int size=1000000;int[] a = new int[size];a[0]=1;a[1]=1;                                       for(int i=2;i<n;i++){a[i]=a[i-1]+a[i-2];a[i]=a[i]%10007;}System.out.println(a[n-1]);}
}

BASIC-1    闰年判断

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 闰年判断01 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int y = in.nextInt();if ((y%4==0&&y%100!=0)||y%400==0) {System.out.println("yes");}else {System.out.println("no");}}
}

 BASIC-2    01字串

package 蓝桥杯系统基础练习;public class 零一子串02 {public static void main(String[] args) {for (int j = 0; j < 32; j++) {String str = Integer.toBinaryString(j);System.out.printf("%05d",Integer.valueOf(str));System.out.println();}}
}

 BASIC-3    字母图形

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 字母图形03 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int a=in.nextInt();int b=in.nextInt();int cnt;String c="ABCDEFGHIJKLMNOPQRSTUVWXYZ";for (int i = 0; i < a; i++) {cnt=0;if(i>0)for(int k=i-1;k>=0;k--) {System.out.print(c.charAt(k+1));cnt++;if(cnt==b)break;}for (int j = i; j < b; j++) {System.out.print(c.charAt(j-i));}	System.out.println();}}
}

 BASIC-4    数列特征

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 数列特征04 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] a= new int[10005];int max=-10000,min=10000,sum=0;for (int i = 0; i < n; i++) {a[i]=in.nextInt();if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];sum+=a[i];}System.out.print(max+"\n"+min+"\n"+sum);}
}

 BASIC-5    查找整数

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 查找整数05 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n= in.nextInt();int[] a = new int[1005];for (int i = 0; i < n; i++) {a[i]=in.nextInt();}int find=in.nextInt();int flag=1;for (int i = 0; i < n; i++) {if(a[i]==find) {System.out.println(i+1);flag=0;break;}}if(flag==1)System.out.println(-1);}
}

BASIC-6    杨辉三角形

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 杨辉三角06 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int[][] a= new int[35][35];  a[1][1]=1;System.out.println(1);for (int i = 2; i <= n; i++) {for (int j = 1; j <= i; j++) {a[i][j]=a[i-1][j-1]+a[i-1][j];//保存a[i][j]System.out.print(a[i][j]+" ");}System.out.println();}}
}

 BASIC-7    特殊的数字

package 蓝桥杯系统基础练习;public class 特殊的数字07 {public static void main(String[] args) {int ge,shi,bai;for (int i = 100; i <1000; i++) {ge=i%10;shi=i/10%10;bai=i/100;if(i==Math.pow(ge,3)+Math.pow(shi,3)+Math.pow(bai,3)) {System.out.println(i);}}}
}

BASIC-8    回文数

package 蓝桥杯系统基础练习;public class 回文数08 {public static void main(String[] args) {int ge,shi,bai,qian;for(int i=1000;i<10000;i++) {ge=i%10;shi=i/10%10;bai=i/100%10;qian=i/1000;if(ge==qian&&shi==bai)System.out.println(i);}}
}

 BASIC-9    特殊回文数

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 特殊回文数09 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();for(int w1=0;w1<10;w1++) {for(int w2=0;w2<10;w2++) {for(int w3=0;w3<10;w3++) {for(int w4=0;w4<10;w4++) {for(int w5=1;w5<10;w5++) {if(w1+w2+w3+w4+w5==n&&w1==w5&&w2==w4)System.out.println(10000*w5+1000*w4+100*w3+10*w2+w1);}}}}}for(int w1=0;w1<10;w1++) {for(int w2=0;w2<10;w2++) {for(int w3=0;w3<10;w3++) {for(int w4=0;w4<10;w4++) {for(int w5=0;w5<10;w5++) {for(int w6=1;w6<10;w6++) {if(w1+w2+w3+w4+w5+w6==n&&w1==w6&&w2==w5&&w3==w4)System.out.println(100000*w6+10000*w5+1000*w4+100*w3+10*w2+w1);}}}}}}}
}

 BASIC-10    十进制转十六进制

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 十进制转十六进制10 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int num =in.nextInt();String str = Integer.toHexString(num);//将数字转换成十六进制System.out.println(str.toUpperCase());//小写转为大写字母,数字不变}
}

 BASIC-11    十六进制转十进制

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 十六进制转十进制11 {public static int toTenbit(char c) {switch(c) {case 'A':return 10;case 'B':return 11;case 'C':return 12;case 'D':return 13;case 'E':return 14;case 'F':return 15;	default:return c-48;}}public static void main(String[] args) {Scanner in = new Scanner(System.in);String str=in.next();long sum=0;char[] c=str.toCharArray();//将字符串对象的字符转化为字符数组for (int i = c.length-1; i >=0; i--) {sum+=toTenbit(c[i])*Math.pow(16, c.length-i-1);}System.out.println(sum);}
}

 BASIC-12    十六进制转八进制

package 蓝桥杯系统基础练习;
/* 思路:* 将十六进制转成二进制,再将二进制转成八进制。* 过程中16-2的转换是四位一组,2-8的是三位一组,中间要补上位数不足的零。* 在将十六进制转换为二进制完成后,记得算一下长度是不是3的倍数,* 如果不是记得补齐,不然三位一个转八进制时就会因为位数不足出错。* 最后输出的时候,用正则表达式将八进制前面的0去掉.*/
import java.util.Scanner;public class 十六进制转八进制12 {public static void main(String args[]) {Scanner in = new Scanner(System.in);int n = in.nextInt();String arr[] = new String[n];for(int i = 0;i < n;i++) {arr[i] = in.next();}for(int i = 0;i < arr.length;i++) {String s = HextoOct(arr[i]);System.out.println(s.replaceFirst("^0", ""));//使用给定的参数""替换字符串第一个匹配给定的正则表达式(一或多个零)的字符串。去开头多余的零。}}private static String HextoOct(String s) {StringBuffer s1=new StringBuffer("");//十六进制转二进制for(int i=0;i<s.length();i++) {switch(s.charAt(i)) {//charAt(int index)用来检索特定索引下的字符的String实例.case '0':s1.append("0000");break;case '1':s1.append("0001");break;case '2':s1.append("0010");break;case '3':s1.append("0011");break;case '4':s1.append("0100");break;case '5':s1.append("0101");break;case '6':s1.append("0110");break;case '7':s1.append("0111");break;case '8':s1.append("1000");break;case '9':s1.append("1001");break;case 'A':s1.append("1010");break;case 'B':s1.append("1011");break;case 'C':s1.append("1100");break;case 'D':s1.append("1101");break;case 'E':s1.append("1110");break;case 'F':s1.append("1111");break;}}s = s1.toString();//s1转换为字符串//字符的长度如果不能整除3,则需要在转换的结果前补0;if (s.length()%3 == 1)s = "00"+s;else if(s.length()%3 == 2)s = "0"+s;StringBuffer s2 =new StringBuffer("");//二进制转八进制for(int i = 0;i < s1.length();i+=3) {String str = s.substring(i, i+3);//substring(x,y)是从x到y前的位置停止switch(str) {case "000":s2.append('0');break;case "001":s2.append('1');break;case "010":s2.append('2');break;case "011":s2.append('3');break;case "100":s2.append('4');break;case "101":s2.append('5');break;case "110":s2.append('6');break;case "111":s2.append('7');break;}}return s2.toString();}
}

 BASIC-13    数列排序

package 蓝桥杯系统基础练习;import java.util.Arrays;
import java.util.Scanner;public class 数列排序13 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int []a = new int[n];for (int i = 0; i < n; i++) {a[i]=in.nextInt();}Arrays.sort(a);for (int i = 0; i < n; i++) {System.out.print(a[i]+" ");}}
}

BASIC-14    VIP试题 时间转换

package 基础练习VIP;import java.util.Scanner;public class 时间转换14 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int num=in.nextInt();int shi,feng,miao;shi=num/3600;feng=(num-shi*3600)/60;miao=num%60;System.out.println(shi+":"+feng+":"+miao);}
}

 BASIC-15    VIP试题 字符串对比

package 基础练习VIP;import java.util.Scanner;public class 字符串对比15 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s1=in.next();String s2=in.next();if(s1.length()!=s2.length())System.out.println(1);else if (s1.equals(s2))System.out.println(2);else if (s1.toLowerCase().equals(s2.toLowerCase()))System.out.println(3);else System.out.println(4);}
}

 BASIC-16    VIP试题 分解质因数

package 基础练习VIP;import java.util.Scanner;public class 分解质因数16 {public static boolean isPrime(int n) {for(int i=2;i*i<=n;i++) {if(n%i==0)return false;}return true;}public static String resolve(int n) {		String str="";int i=2;while (n!=1) {if(isPrime(i)&&n%i==0) {//如果i是质数且能被n整除str=str+"*"+i;n=n/i;}else i++;//质因数从小到大排序}return str.substring(1);//去掉首字符*:截取索引从一开始的字符串}public static void main(String[] args) {Scanner in = new Scanner(System.in);int a=in.nextInt();int b=in.nextInt();		for(int i=a;i<=b;i++)if(isPrime(i)==true)System.out.println(i+"="+i);else System.out.println(i+"="+resolve(i));}
}

 BASIC-17    VIP试题 矩阵乘法

package 基础练习VIP;import java.util.Scanner;public class 矩阵乘法17 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int a[][]=new int[35][35];int r[][]=new int[35][35]; //结果int N=in.nextInt();int M=in.nextInt();for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {a[i][j]=in.nextInt();}}for (int i = 0; i < N; i++) {r[i][i]=1;//单位矩阵,如同数的乘法中的1}for (int m = 0; m < M; m++) {            //M次幂int t[][]=new int[35][35];			 //引入临时变量for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {for (int k = 0; k < N; k++) {//每个元素对应相乘再相加t[i][j]+=r[k][j]*a[i][k]; }}}for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {r[i][j]=t[i][j];			//更新a数组的值}}t=null;								//t清零再次做乘法运算}for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {System.out.print(r[i][j]+" ");}	System.out.println();}}
}

 BASIC-18    VIP试题 矩形面积交

package 基础练习VIP;import java.util.Scanner;public class 矩形面积交18 {public static void main(String[] args) {Scanner in = new Scanner(System.in);double x[]=new double[5];double y[]=new double[5];double x1,y1,x2,y2;	//交集矩形的左下和右上坐标for (int i = 1; i < 5; i++) {x[i]=in.nextDouble();y[i]=in.nextDouble();}//例如:首先交集矩形的左下横坐标:肯定是每个矩形的横坐标较小的一个,//之后交集矩形的左下横坐标肯定是在中间,所以x1再取最大值x1=Math.max(Math.min(x[1],x[2]),Math.min(x[3],x[4]));//左下横坐标y1=Math.max(Math.min(y[1],y[2]),Math.min(y[3],y[4]));//y坐标同理x2=Math.min(Math.max(x[1],x[2]),Math.max(x[3],x[4]));//右上横坐标y2=Math.min(Math.max(y[1],y[2]),Math.max(y[3],y[4]));
//		System.out.println(x1);
//		System.out.println(y1);
//		System.out.println(x2);
//		System.out.println(y2);if(y2>y1&&x2>x1)System.out.printf("%.2f",(y2-y1)*(x2-x1));else System.out.println("0.00");}
}

 BASIC-19    VIP试题 完美的代价

package 基础练习VIP;
/*思路
先说不可能的情况:①字符串长度是偶数,字符串中出现了某个出现次数为奇数的字符
②字符串长度是奇数,字符串中出现了一个以上出现次数为奇数的字符
解题思路为:
①设置边界front,end。
②从后往前寻找与front处相同的字符。
③若找到,则把这个字符移动到end处(因为题目规定只能相邻的两个字符移动,所以此处是指一个一个的移动,
直到把目标字符移动到end处),并计算移动的次数,然后缩小边界:front++;end–;
若没有找到,则判断是否为“Impossible”情况,若是则输出“Impossible”并结束程序;
若不是则计算将此字符移动到中间位置所需次数(只是计算次数,并不需要真正的移动),然后缩小边界:front++;
④重复①~③步骤,直到front >= end
⑤输出结果
ps.若是提前将出现次数为奇数的字符移动到中间位置,那么接下来的每一次交换次数都会+1,
所以这个字符要在最后一步才把它移动到中间位置。*/
import java.util.Scanner;public class 完美的代价19 {static char[] swap(char[] c,int before,int obj) {//交换c[before]到位置c[obj]char tem=c[before]; //先保存c[before]的字符,因为之后会往前推for (int i = before; i < obj; i++) {c[i]=c[i+1];	//把目标索引之前的字符往前推一}c[obj]=tem;	//目标位置替换为之前的字符return c;}public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();String s=in.next();//char[] c=s.toCharArray();//将字符串对象的字符转化为字符数组char[] c=new char[n];for(int i=0;i<n;i++){c[i] = s.charAt(i);}int front=0,end=n-1,times=0;boolean flag=false;while (front<end) {for (int i = end; i >= front; i--) {if (i==front) {//如果没找到和front处相同的字符,即front处是一个出现次数为奇数的字符if(n%2==0||flag) {System.out.println("Impossible");System.exit(0);}else {times +=n/2-front;flag=true;//出现次数为奇数的字符找到了一次,若再出现一次则Impossiblefront++;break;}}if(c[i]==c[front]) {c=swap(c,i,end);times+=end-i;front++;end--;break;}}}System.out.println(times);}
}

 BASIC-20    VIP试题 数的读法

package 基础练习VIP;import java.util.Scanner;public class 数的读法20 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s=in.next();int len=s.length();char[] str=s.toCharArray();String[] num= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};//0-9//11位读数:因为数值大小不超过2,000,000,000//					 20,0000,0000  //                   bit位数倒序String[] bit= {"","","shi","bai","qian","wan","shi","bai","qian","yi","shi"};int j;for (int i = 0; i < len; i++) {j=str[i]-48;	//将各位上的数由字符型转换为int型//System.out.println(j);if(j==0) {//当前的数是0if(i<len-1) {//当下字符不是末字符if(str[i+1]!=48)//下一个字符不是0System.out.print(num[j]+" ");//读零}}else if((len-i==2||len-i==6||len-i==10)&&j==1) {System.out.print(bit[len-i]+" ");//当前的数是1且位数读十}else if(i>=1&&str[i-1]==48&&j==1) {//当前的数是1且上一个数是零,且位数不读十System.out.print(bit[len-i]+" ");}else //当前的数非0非1;当前的数是1且上一个数非零:直接读数System.out.print(num[j]+" "+bit[len-i]+" ");}}
}

  BASIC-22    VIP试题 FJ的字符串

package 基础练习VIP;import java.util.Scanner;public class FJ的字符串22 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();System.out.println(AN(n));}static String AN(int n) {if (n==1) {return "A";}else {char c=(char) ('A'+n-1);return AN(n-1)+String.valueOf(c)+AN(n-1);}}
}

 BASIC-23    VIP试题 芯片测试

package 基础练习VIP;import java.util.Scanner;/*这个題其实关键的解题就一个,*只要其他的芯片对一个芯片的判断结果是1的个数大于0的个数,就可以判断这个是一个好芯片。为什么呢?*因为题目中说了,其中坏的芯片的判断是随即的要不是1要不是0,*所以对一个好的芯片(被检测)的判断而言,用坏的去判断(检测方)这个好的,显示1和显示0的概率都是50%,*而如果还有一个好的芯片(检测方)也去判断这个好的芯片(被检测),这个结果一定是1,*所以这个显示1的总数一定会大于显示0的个数,即显示1的总数大于总数的一半。*/
public class 芯片测试23 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int a[][]=new int[21][21];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {a[i][j]=in.nextInt();}}int sum;//用第i块芯片测试第j块芯片时得到的测试结果为好的个数for (int j = 0; j < n; j++) {//其他的芯片对第j块芯片的判断sum=0;for (int i = 0; i <n; i++) {sum+=a[i][j];}if (sum>n/2) {System.out.print(j+1+" ");}}}
}

 BASIC-24    VIP试题 龟兔赛跑预测

package 基础练习VIP;import java.util.Scanner;public class 龟兔赛跑预测24 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int v1=in.nextInt();int v2=in.nextInt();int t=in.nextInt();int s=in.nextInt();int l=in.nextInt();int s1=0,s2=0,cnt=0;for (int i = 1;s1<l&&s2<l; i++) {s1+=v1;s2+=v2;if(s1>=l)continue;//易错点:若兔子已到达终点,不执行后面的代码(乌龟的路程不能再变化)if (s1-s2>=t) {s2+=v2*s;  cnt++;}	} if(s1==s2){	//两者同时到达终点System.out.println("D"+"\n"+l/v2);  }else if(s1>s2) {	//兔子获胜System.out.println("R "+"\n"+(l/v1+cnt*s));}else if (s1<s2) {	//乌龟获胜System.out.println("T"+"\n"+l/v2);}}
}

 BASIC-25    VIP试题 回形取数

package 基础练习VIP;import java.util.Scanner;public class 回形取数25 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int m=in.nextInt();int n=in.nextInt();int a[][]=new int[205][205];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {a[i][j]=in.nextInt();}}int i=-1,j=0,sum=0;//只需首次判断是否到边界,之后判断是否直走下去的数已输出过while (sum<m*n) {while(i<m-1&&a[i+1][j]!=-1) {//纵坐标不变,横坐标++,左侧System.out.print(a[++i][j]+" ");a[i][j]=-1;//标记已输出过sum++;}while(j<n-1&&a[i][j+1]!=-1) {//横坐标不变,纵坐标++System.out.print(a[i][++j]+" ");a[i][j]=-1;sum++;}while(i>0&&a[i-1][j]!=-1) {//纵坐标不变,横坐标--System.out.print(a[--i][j]+" ");a[i][j]=-1;sum++;} while(j>0&&a[i][j-1]!=-1) {//横坐标不变,纵坐标--  System.out.print(a[i][--j]+" ");a[i][j]=-1;sum++;}		}}
}

 BASIC-26    VIP试题 报时助手

package 基础练习VIP;import java.util.Scanner;public class 报时助手26 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int h=in.nextInt();int m=in.nextInt();String num[]={"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty"};if(m==0) {if(h<=20)System.out.println(num[h]+" o'clock");else {System.out.println("twenty "+num[h%20]+" o'clock");}}else {if(h<=20)System.out.print(num[h]+" ");else {System.out.print("twenty "+num[h%20]+" ");}if(m<=20)System.out.println(num[m]);else if(m<30)System.out.println("twenty "+num[m%20]);else if(m==30)System.out.println("thirty ");else if(m<40)System.out.println("thirty "+num[m%30]);else if(m==40)System.out.println("forty ");else if(m<50)System.out.println("forty "+num[m%40]);else if(m==50)System.out.println("fifty");else if(m<60)System.out.println("fifty "+num[m%50]);}}
}

 BASIC-28    VIP试题 Huffuman树

package 基础练习VIP;import java.util.Arrays;
import java.util.Scanner;public class Huffuman树28 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int a[]=new int[n];int sum=0;for (int i = 0; i < n; i++) {a[i]=in.nextInt();}for (int i = 0; i < n-1; i++) {Arrays.sort(a);sum+=a[0]+a[1];	//从数组中删除最小的两个数:a[0]=a[0]+a[1];	//令第一个元素为新数加入a[1]=100001;	//令第二个元素为一个大于之后的新数(由题:这里取100*1000+1),避免计入。相当于删去啦。}System.out.println(sum);}
}

 BASIC-29    VIP试题 高精度加法

package 基础练习VIP;import java.util.Scanner;public class 高精度加法29 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s1,s2;StringBuffer c =new StringBuffer();s1=in.next();s2=in.next();char a[]=s1.toCharArray();char b[]=s2.toCharArray();int t,x,y;for (int i=a.length-1,j=b.length-1,r=0;i>=0||j>=0||r>0;i--,j--){x=i>=0?a[i]-'0':0;//防止a,b长度不同的情况,其中一个数已经取完了。y=j>=0?b[j]-'0':0;t=x+y+r;r=t/10;c=c.append(t%10);}System.out.println(c.reverse());//字符串颠倒}
}

 BASIC-30    VIP试题 阶乘计算

package 基础练习VIP;import java.util.Scanner;public class 阶乘计算30 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int a[]=new int[3000];a[0]=1;int s=0,m;for (int i = 2; i <= n; i++) {for (int j = 0; j < 3000; j++) {//题目提示:a乘以一个整数i变为将数组A的每一个元素都乘以im=a[j]*i+s;//每一位的计算a[j]=m%10; //当前的位的数s=m/10;	   //求需要进位的数 		}			}int i=2999;while(a[i]==0){i--;};//寻找第一个不为零的项,因为后面的项都是零,数的最高位不是零,倒序寻找。for (int j = i; j >=0; j--) {//逆向输出 System.out.print(a[j]);}}
}

 

 

蓝桥杯练习系统基础练习答案(含VIP试题)

 

目录

BASIC-01    A+B问题

BASIC-02    序列求和 

 BASIC-03    圆的面积

 BASIC-04    Fibonacci数列

BASIC-1    闰年判断

 BASIC-2    01字串

 BASIC-3    字母图形

 BASIC-4    数列特征

 BASIC-5    查找整数

BASIC-6    杨辉三角形

 BASIC-7    特殊的数字

BASIC-8    回文数

 BASIC-9    特殊回文数

 BASIC-10    十进制转十六进制

 BASIC-11    十六进制转十进制

 BASIC-12    十六进制转八进制

 BASIC-13    数列排序

BASIC-14    VIP试题 时间转换

 BASIC-15    VIP试题 字符串对比

 BASIC-16    VIP试题 分解质因数

 BASIC-17    VIP试题 矩阵乘法

 BASIC-18    VIP试题 矩形面积交

 BASIC-19    VIP试题 完美的代价

 BASIC-20    VIP试题 数的读法

  BASIC-22    VIP试题 FJ的字符串

 BASIC-23    VIP试题 芯片测试

 BASIC-24    VIP试题 龟兔赛跑预测

 BASIC-25    VIP试题 回形取数

 BASIC-26    VIP试题 报时助手

 BASIC-28    VIP试题 Huffuman树

 BASIC-29    VIP试题 高精度加法

 BASIC-30    VIP试题 阶乘计算


OJ链接:.page?code=BASIC-&userid=301077

       虽然大三了,对算法掌握的不是很好,这些题的我的解题思路大部分都是比较常规的解法,没有涉及到数据结构和复杂算法,希望能帮助到大家。类名以题目和题号命名,思路写在注释,AC代码依次如下。

BASIC-01    A+B问题

package 蓝桥杯系统入门训练;import java.util.*;
public class A加B问题{public static void main(String[] args) {Scanner sc = new Scanner(System.in);Integer a = sc.nextInt();Integer b = sc.nextInt();System.out.println(a + b);}
}

BASIC-02    序列求和 

package 蓝桥杯系统入门训练;import java.util.Scanner;public class 入门训练_序列求和 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);long n = sc.nextInt();System.out.println((1+n)*n/2);//n很大时,用循环做会超时!}
}

 BASIC-03    圆的面积

package 蓝桥杯系统入门训练;import java.util.Scanner;public class 入门训练_圆的面积 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);double r = sc.nextDouble();System.out.printf("%.7f",Math.PI*r*r);//3.1415926535}
}

 BASIC-04    Fibonacci数列

package 蓝桥杯系统入门训练;import java.util.Scanner;public class 入门训练_Fibonacci数列 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int size=1000000;int[] a = new int[size];a[0]=1;a[1]=1;                                       for(int i=2;i<n;i++){a[i]=a[i-1]+a[i-2];a[i]=a[i]%10007;}System.out.println(a[n-1]);}
}

BASIC-1    闰年判断

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 闰年判断01 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int y = in.nextInt();if ((y%4==0&&y%100!=0)||y%400==0) {System.out.println("yes");}else {System.out.println("no");}}
}

 BASIC-2    01字串

package 蓝桥杯系统基础练习;public class 零一子串02 {public static void main(String[] args) {for (int j = 0; j < 32; j++) {String str = Integer.toBinaryString(j);System.out.printf("%05d",Integer.valueOf(str));System.out.println();}}
}

 BASIC-3    字母图形

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 字母图形03 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int a=in.nextInt();int b=in.nextInt();int cnt;String c="ABCDEFGHIJKLMNOPQRSTUVWXYZ";for (int i = 0; i < a; i++) {cnt=0;if(i>0)for(int k=i-1;k>=0;k--) {System.out.print(c.charAt(k+1));cnt++;if(cnt==b)break;}for (int j = i; j < b; j++) {System.out.print(c.charAt(j-i));}	System.out.println();}}
}

 BASIC-4    数列特征

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 数列特征04 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] a= new int[10005];int max=-10000,min=10000,sum=0;for (int i = 0; i < n; i++) {a[i]=in.nextInt();if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];sum+=a[i];}System.out.print(max+"\n"+min+"\n"+sum);}
}

 BASIC-5    查找整数

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 查找整数05 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n= in.nextInt();int[] a = new int[1005];for (int i = 0; i < n; i++) {a[i]=in.nextInt();}int find=in.nextInt();int flag=1;for (int i = 0; i < n; i++) {if(a[i]==find) {System.out.println(i+1);flag=0;break;}}if(flag==1)System.out.println(-1);}
}

BASIC-6    杨辉三角形

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 杨辉三角06 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int[][] a= new int[35][35];  a[1][1]=1;System.out.println(1);for (int i = 2; i <= n; i++) {for (int j = 1; j <= i; j++) {a[i][j]=a[i-1][j-1]+a[i-1][j];//保存a[i][j]System.out.print(a[i][j]+" ");}System.out.println();}}
}

 BASIC-7    特殊的数字

package 蓝桥杯系统基础练习;public class 特殊的数字07 {public static void main(String[] args) {int ge,shi,bai;for (int i = 100; i <1000; i++) {ge=i%10;shi=i/10%10;bai=i/100;if(i==Math.pow(ge,3)+Math.pow(shi,3)+Math.pow(bai,3)) {System.out.println(i);}}}
}

BASIC-8    回文数

package 蓝桥杯系统基础练习;public class 回文数08 {public static void main(String[] args) {int ge,shi,bai,qian;for(int i=1000;i<10000;i++) {ge=i%10;shi=i/10%10;bai=i/100%10;qian=i/1000;if(ge==qian&&shi==bai)System.out.println(i);}}
}

 BASIC-9    特殊回文数

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 特殊回文数09 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();for(int w1=0;w1<10;w1++) {for(int w2=0;w2<10;w2++) {for(int w3=0;w3<10;w3++) {for(int w4=0;w4<10;w4++) {for(int w5=1;w5<10;w5++) {if(w1+w2+w3+w4+w5==n&&w1==w5&&w2==w4)System.out.println(10000*w5+1000*w4+100*w3+10*w2+w1);}}}}}for(int w1=0;w1<10;w1++) {for(int w2=0;w2<10;w2++) {for(int w3=0;w3<10;w3++) {for(int w4=0;w4<10;w4++) {for(int w5=0;w5<10;w5++) {for(int w6=1;w6<10;w6++) {if(w1+w2+w3+w4+w5+w6==n&&w1==w6&&w2==w5&&w3==w4)System.out.println(100000*w6+10000*w5+1000*w4+100*w3+10*w2+w1);}}}}}}}
}

 BASIC-10    十进制转十六进制

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 十进制转十六进制10 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int num =in.nextInt();String str = Integer.toHexString(num);//将数字转换成十六进制System.out.println(str.toUpperCase());//小写转为大写字母,数字不变}
}

 BASIC-11    十六进制转十进制

package 蓝桥杯系统基础练习;import java.util.Scanner;public class 十六进制转十进制11 {public static int toTenbit(char c) {switch(c) {case 'A':return 10;case 'B':return 11;case 'C':return 12;case 'D':return 13;case 'E':return 14;case 'F':return 15;	default:return c-48;}}public static void main(String[] args) {Scanner in = new Scanner(System.in);String str=in.next();long sum=0;char[] c=str.toCharArray();//将字符串对象的字符转化为字符数组for (int i = c.length-1; i >=0; i--) {sum+=toTenbit(c[i])*Math.pow(16, c.length-i-1);}System.out.println(sum);}
}

 BASIC-12    十六进制转八进制

package 蓝桥杯系统基础练习;
/* 思路:* 将十六进制转成二进制,再将二进制转成八进制。* 过程中16-2的转换是四位一组,2-8的是三位一组,中间要补上位数不足的零。* 在将十六进制转换为二进制完成后,记得算一下长度是不是3的倍数,* 如果不是记得补齐,不然三位一个转八进制时就会因为位数不足出错。* 最后输出的时候,用正则表达式将八进制前面的0去掉.*/
import java.util.Scanner;public class 十六进制转八进制12 {public static void main(String args[]) {Scanner in = new Scanner(System.in);int n = in.nextInt();String arr[] = new String[n];for(int i = 0;i < n;i++) {arr[i] = in.next();}for(int i = 0;i < arr.length;i++) {String s = HextoOct(arr[i]);System.out.println(s.replaceFirst("^0", ""));//使用给定的参数""替换字符串第一个匹配给定的正则表达式(一或多个零)的字符串。去开头多余的零。}}private static String HextoOct(String s) {StringBuffer s1=new StringBuffer("");//十六进制转二进制for(int i=0;i<s.length();i++) {switch(s.charAt(i)) {//charAt(int index)用来检索特定索引下的字符的String实例.case '0':s1.append("0000");break;case '1':s1.append("0001");break;case '2':s1.append("0010");break;case '3':s1.append("0011");break;case '4':s1.append("0100");break;case '5':s1.append("0101");break;case '6':s1.append("0110");break;case '7':s1.append("0111");break;case '8':s1.append("1000");break;case '9':s1.append("1001");break;case 'A':s1.append("1010");break;case 'B':s1.append("1011");break;case 'C':s1.append("1100");break;case 'D':s1.append("1101");break;case 'E':s1.append("1110");break;case 'F':s1.append("1111");break;}}s = s1.toString();//s1转换为字符串//字符的长度如果不能整除3,则需要在转换的结果前补0;if (s.length()%3 == 1)s = "00"+s;else if(s.length()%3 == 2)s = "0"+s;StringBuffer s2 =new StringBuffer("");//二进制转八进制for(int i = 0;i < s1.length();i+=3) {String str = s.substring(i, i+3);//substring(x,y)是从x到y前的位置停止switch(str) {case "000":s2.append('0');break;case "001":s2.append('1');break;case "010":s2.append('2');break;case "011":s2.append('3');break;case "100":s2.append('4');break;case "101":s2.append('5');break;case "110":s2.append('6');break;case "111":s2.append('7');break;}}return s2.toString();}
}

 BASIC-13    数列排序

package 蓝桥杯系统基础练习;import java.util.Arrays;
import java.util.Scanner;public class 数列排序13 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int []a = new int[n];for (int i = 0; i < n; i++) {a[i]=in.nextInt();}Arrays.sort(a);for (int i = 0; i < n; i++) {System.out.print(a[i]+" ");}}
}

BASIC-14    VIP试题 时间转换

package 基础练习VIP;import java.util.Scanner;public class 时间转换14 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int num=in.nextInt();int shi,feng,miao;shi=num/3600;feng=(num-shi*3600)/60;miao=num%60;System.out.println(shi+":"+feng+":"+miao);}
}

 BASIC-15    VIP试题 字符串对比

package 基础练习VIP;import java.util.Scanner;public class 字符串对比15 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s1=in.next();String s2=in.next();if(s1.length()!=s2.length())System.out.println(1);else if (s1.equals(s2))System.out.println(2);else if (s1.toLowerCase().equals(s2.toLowerCase()))System.out.println(3);else System.out.println(4);}
}

 BASIC-16    VIP试题 分解质因数

package 基础练习VIP;import java.util.Scanner;public class 分解质因数16 {public static boolean isPrime(int n) {for(int i=2;i*i<=n;i++) {if(n%i==0)return false;}return true;}public static String resolve(int n) {		String str="";int i=2;while (n!=1) {if(isPrime(i)&&n%i==0) {//如果i是质数且能被n整除str=str+"*"+i;n=n/i;}else i++;//质因数从小到大排序}return str.substring(1);//去掉首字符*:截取索引从一开始的字符串}public static void main(String[] args) {Scanner in = new Scanner(System.in);int a=in.nextInt();int b=in.nextInt();		for(int i=a;i<=b;i++)if(isPrime(i)==true)System.out.println(i+"="+i);else System.out.println(i+"="+resolve(i));}
}

 BASIC-17    VIP试题 矩阵乘法

package 基础练习VIP;import java.util.Scanner;public class 矩阵乘法17 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int a[][]=new int[35][35];int r[][]=new int[35][35]; //结果int N=in.nextInt();int M=in.nextInt();for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {a[i][j]=in.nextInt();}}for (int i = 0; i < N; i++) {r[i][i]=1;//单位矩阵,如同数的乘法中的1}for (int m = 0; m < M; m++) {            //M次幂int t[][]=new int[35][35];			 //引入临时变量for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {for (int k = 0; k < N; k++) {//每个元素对应相乘再相加t[i][j]+=r[k][j]*a[i][k]; }}}for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {r[i][j]=t[i][j];			//更新a数组的值}}t=null;								//t清零再次做乘法运算}for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {System.out.print(r[i][j]+" ");}	System.out.println();}}
}

 BASIC-18    VIP试题 矩形面积交

package 基础练习VIP;import java.util.Scanner;public class 矩形面积交18 {public static void main(String[] args) {Scanner in = new Scanner(System.in);double x[]=new double[5];double y[]=new double[5];double x1,y1,x2,y2;	//交集矩形的左下和右上坐标for (int i = 1; i < 5; i++) {x[i]=in.nextDouble();y[i]=in.nextDouble();}//例如:首先交集矩形的左下横坐标:肯定是每个矩形的横坐标较小的一个,//之后交集矩形的左下横坐标肯定是在中间,所以x1再取最大值x1=Math.max(Math.min(x[1],x[2]),Math.min(x[3],x[4]));//左下横坐标y1=Math.max(Math.min(y[1],y[2]),Math.min(y[3],y[4]));//y坐标同理x2=Math.min(Math.max(x[1],x[2]),Math.max(x[3],x[4]));//右上横坐标y2=Math.min(Math.max(y[1],y[2]),Math.max(y[3],y[4]));
//		System.out.println(x1);
//		System.out.println(y1);
//		System.out.println(x2);
//		System.out.println(y2);if(y2>y1&&x2>x1)System.out.printf("%.2f",(y2-y1)*(x2-x1));else System.out.println("0.00");}
}

 BASIC-19    VIP试题 完美的代价

package 基础练习VIP;
/*思路
先说不可能的情况:①字符串长度是偶数,字符串中出现了某个出现次数为奇数的字符
②字符串长度是奇数,字符串中出现了一个以上出现次数为奇数的字符
解题思路为:
①设置边界front,end。
②从后往前寻找与front处相同的字符。
③若找到,则把这个字符移动到end处(因为题目规定只能相邻的两个字符移动,所以此处是指一个一个的移动,
直到把目标字符移动到end处),并计算移动的次数,然后缩小边界:front++;end–;
若没有找到,则判断是否为“Impossible”情况,若是则输出“Impossible”并结束程序;
若不是则计算将此字符移动到中间位置所需次数(只是计算次数,并不需要真正的移动),然后缩小边界:front++;
④重复①~③步骤,直到front >= end
⑤输出结果
ps.若是提前将出现次数为奇数的字符移动到中间位置,那么接下来的每一次交换次数都会+1,
所以这个字符要在最后一步才把它移动到中间位置。*/
import java.util.Scanner;public class 完美的代价19 {static char[] swap(char[] c,int before,int obj) {//交换c[before]到位置c[obj]char tem=c[before]; //先保存c[before]的字符,因为之后会往前推for (int i = before; i < obj; i++) {c[i]=c[i+1];	//把目标索引之前的字符往前推一}c[obj]=tem;	//目标位置替换为之前的字符return c;}public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();String s=in.next();//char[] c=s.toCharArray();//将字符串对象的字符转化为字符数组char[] c=new char[n];for(int i=0;i<n;i++){c[i] = s.charAt(i);}int front=0,end=n-1,times=0;boolean flag=false;while (front<end) {for (int i = end; i >= front; i--) {if (i==front) {//如果没找到和front处相同的字符,即front处是一个出现次数为奇数的字符if(n%2==0||flag) {System.out.println("Impossible");System.exit(0);}else {times +=n/2-front;flag=true;//出现次数为奇数的字符找到了一次,若再出现一次则Impossiblefront++;break;}}if(c[i]==c[front]) {c=swap(c,i,end);times+=end-i;front++;end--;break;}}}System.out.println(times);}
}

 BASIC-20    VIP试题 数的读法

package 基础练习VIP;import java.util.Scanner;public class 数的读法20 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s=in.next();int len=s.length();char[] str=s.toCharArray();String[] num= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};//0-9//11位读数:因为数值大小不超过2,000,000,000//					 20,0000,0000  //                   bit位数倒序String[] bit= {"","","shi","bai","qian","wan","shi","bai","qian","yi","shi"};int j;for (int i = 0; i < len; i++) {j=str[i]-48;	//将各位上的数由字符型转换为int型//System.out.println(j);if(j==0) {//当前的数是0if(i<len-1) {//当下字符不是末字符if(str[i+1]!=48)//下一个字符不是0System.out.print(num[j]+" ");//读零}}else if((len-i==2||len-i==6||len-i==10)&&j==1) {System.out.print(bit[len-i]+" ");//当前的数是1且位数读十}else if(i>=1&&str[i-1]==48&&j==1) {//当前的数是1且上一个数是零,且位数不读十System.out.print(bit[len-i]+" ");}else //当前的数非0非1;当前的数是1且上一个数非零:直接读数System.out.print(num[j]+" "+bit[len-i]+" ");}}
}

  BASIC-22    VIP试题 FJ的字符串

package 基础练习VIP;import java.util.Scanner;public class FJ的字符串22 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();System.out.println(AN(n));}static String AN(int n) {if (n==1) {return "A";}else {char c=(char) ('A'+n-1);return AN(n-1)+String.valueOf(c)+AN(n-1);}}
}

 BASIC-23    VIP试题 芯片测试

package 基础练习VIP;import java.util.Scanner;/*这个題其实关键的解题就一个,*只要其他的芯片对一个芯片的判断结果是1的个数大于0的个数,就可以判断这个是一个好芯片。为什么呢?*因为题目中说了,其中坏的芯片的判断是随即的要不是1要不是0,*所以对一个好的芯片(被检测)的判断而言,用坏的去判断(检测方)这个好的,显示1和显示0的概率都是50%,*而如果还有一个好的芯片(检测方)也去判断这个好的芯片(被检测),这个结果一定是1,*所以这个显示1的总数一定会大于显示0的个数,即显示1的总数大于总数的一半。*/
public class 芯片测试23 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int a[][]=new int[21][21];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {a[i][j]=in.nextInt();}}int sum;//用第i块芯片测试第j块芯片时得到的测试结果为好的个数for (int j = 0; j < n; j++) {//其他的芯片对第j块芯片的判断sum=0;for (int i = 0; i <n; i++) {sum+=a[i][j];}if (sum>n/2) {System.out.print(j+1+" ");}}}
}

 BASIC-24    VIP试题 龟兔赛跑预测

package 基础练习VIP;import java.util.Scanner;public class 龟兔赛跑预测24 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int v1=in.nextInt();int v2=in.nextInt();int t=in.nextInt();int s=in.nextInt();int l=in.nextInt();int s1=0,s2=0,cnt=0;for (int i = 1;s1<l&&s2<l; i++) {s1+=v1;s2+=v2;if(s1>=l)continue;//易错点:若兔子已到达终点,不执行后面的代码(乌龟的路程不能再变化)if (s1-s2>=t) {s2+=v2*s;  cnt++;}	} if(s1==s2){	//两者同时到达终点System.out.println("D"+"\n"+l/v2);  }else if(s1>s2) {	//兔子获胜System.out.println("R "+"\n"+(l/v1+cnt*s));}else if (s1<s2) {	//乌龟获胜System.out.println("T"+"\n"+l/v2);}}
}

 BASIC-25    VIP试题 回形取数

package 基础练习VIP;import java.util.Scanner;public class 回形取数25 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int m=in.nextInt();int n=in.nextInt();int a[][]=new int[205][205];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {a[i][j]=in.nextInt();}}int i=-1,j=0,sum=0;//只需首次判断是否到边界,之后判断是否直走下去的数已输出过while (sum<m*n) {while(i<m-1&&a[i+1][j]!=-1) {//纵坐标不变,横坐标++,左侧System.out.print(a[++i][j]+" ");a[i][j]=-1;//标记已输出过sum++;}while(j<n-1&&a[i][j+1]!=-1) {//横坐标不变,纵坐标++System.out.print(a[i][++j]+" ");a[i][j]=-1;sum++;}while(i>0&&a[i-1][j]!=-1) {//纵坐标不变,横坐标--System.out.print(a[--i][j]+" ");a[i][j]=-1;sum++;} while(j>0&&a[i][j-1]!=-1) {//横坐标不变,纵坐标--  System.out.print(a[i][--j]+" ");a[i][j]=-1;sum++;}		}}
}

 BASIC-26    VIP试题 报时助手

package 基础练习VIP;import java.util.Scanner;public class 报时助手26 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int h=in.nextInt();int m=in.nextInt();String num[]={"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty"};if(m==0) {if(h<=20)System.out.println(num[h]+" o'clock");else {System.out.println("twenty "+num[h%20]+" o'clock");}}else {if(h<=20)System.out.print(num[h]+" ");else {System.out.print("twenty "+num[h%20]+" ");}if(m<=20)System.out.println(num[m]);else if(m<30)System.out.println("twenty "+num[m%20]);else if(m==30)System.out.println("thirty ");else if(m<40)System.out.println("thirty "+num[m%30]);else if(m==40)System.out.println("forty ");else if(m<50)System.out.println("forty "+num[m%40]);else if(m==50)System.out.println("fifty");else if(m<60)System.out.println("fifty "+num[m%50]);}}
}

 BASIC-28    VIP试题 Huffuman树

package 基础练习VIP;import java.util.Arrays;
import java.util.Scanner;public class Huffuman树28 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int a[]=new int[n];int sum=0;for (int i = 0; i < n; i++) {a[i]=in.nextInt();}for (int i = 0; i < n-1; i++) {Arrays.sort(a);sum+=a[0]+a[1];	//从数组中删除最小的两个数:a[0]=a[0]+a[1];	//令第一个元素为新数加入a[1]=100001;	//令第二个元素为一个大于之后的新数(由题:这里取100*1000+1),避免计入。相当于删去啦。}System.out.println(sum);}
}

 BASIC-29    VIP试题 高精度加法

package 基础练习VIP;import java.util.Scanner;public class 高精度加法29 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s1,s2;StringBuffer c =new StringBuffer();s1=in.next();s2=in.next();char a[]=s1.toCharArray();char b[]=s2.toCharArray();int t,x,y;for (int i=a.length-1,j=b.length-1,r=0;i>=0||j>=0||r>0;i--,j--){x=i>=0?a[i]-'0':0;//防止a,b长度不同的情况,其中一个数已经取完了。y=j>=0?b[j]-'0':0;t=x+y+r;r=t/10;c=c.append(t%10);}System.out.println(c.reverse());//字符串颠倒}
}

 BASIC-30    VIP试题 阶乘计算

package 基础练习VIP;import java.util.Scanner;public class 阶乘计算30 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int a[]=new int[3000];a[0]=1;int s=0,m;for (int i = 2; i <= n; i++) {for (int j = 0; j < 3000; j++) {//题目提示:a乘以一个整数i变为将数组A的每一个元素都乘以im=a[j]*i+s;//每一位的计算a[j]=m%10; //当前的位的数s=m/10;	   //求需要进位的数 		}			}int i=2999;while(a[i]==0){i--;};//寻找第一个不为零的项,因为后面的项都是零,数的最高位不是零,倒序寻找。for (int j = i; j >=0; j--) {//逆向输出 System.out.print(a[j]);}}
}