基础练习
第一题 数列排序
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
思路:对于数列排序在java中有对应的Arrays包,里面提供对数列升序排序的方法,也就是Arrays.sort()函数,
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++) {
a[i]=input.nextInt();
}
Arrays.sort(a);
for(int i=0;i<n;i++) {
System.out.print(a[i]+" ");
}
}
}
第二题 十六进制转八进制
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0-9、大写字母A-F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
最开始看到进制转换问题,我就以为是一个简单的问题,我相信大多人都和我一样,但将我在eclipse上实现的代码放入蓝桥杯练习系统中提交,结果是得了0分。题目中有一个很关键的话,每个十六进制长度不超过100000,这个说如果用int或long解决都是不够的,因为她们的位数远没有那么多,于是只能使用字符串型。字符串型不仅能连接字符而且还有许多重要的方法。
思路:题目中提示:先将十六进制转化为某进制,再由某进制数转化为八进制。所以那个中间进制是连接十六进制和八进制的桥梁,那就是二进制。先把十六进制转化为二进制,每位十六进制数正好转化为四个二进制位数,再把二进制数转为八进制数,每三位二进制数可转化为一位八进制数。代码如下:
import java.util.Scanner;
public class Main{
public static String toBinary(String str_Hex) {
StringBuffer str_Bin=new StringBuffer();
for(int i=0;i<str_Hex.length();i++) {
switch(str_Hex.charAt(i)) {
case '0':str_Bin.append("0000");break;
case '1':str_Bin.append("0001");break;
case '2':str_Bin.append("0010");break;
case '3':str_Bin.append("0011");break;
case '4':str_Bin.append("0100");break;
case '5':str_Bin.append("0101");break;
case '6':str_Bin.append("0110");break;
case '7':str_Bin.append("0111");break;
case '8':str_Bin.append("1000");break;
case '9':str_Bin.append("1001");break;
case 'A':str_Bin.append("1010");break;
case 'B':str_Bin.append("1011");break;
case 'C':str_Bin.append("1100");break;
case 'D':str_Bin.append("1101");break;
case 'E':<