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

这是一个包含蓝桥杯基础训练及VIP题目的博客,涵盖了A+B问题、序列求和、圆的面积等基础算法,以及VIP题目如时间转换、字符串对比、分解质因数等。博主分享了每道题的解题思路和AC代码,旨在帮助读者巩固算法基础知识。
摘要由CSDN通过智能技术生成

 

目录

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链接:http://lx.lanqiao.cn/problemset.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;//出现次数为奇数的字符找到了一次,若再出现一次则Impossible
						front++;
						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) {//当前的数是0
				if(i<len-1) {//当下字符不是末字符
					if(str[i+1]!=48)//下一个字符不是0
						System.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的每一个元素都乘以i
				m=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]);
		}
	}
}

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值