学习蓝桥杯编程的第六天

十六进制转八进制

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式
  输出n行,每行为输入对应的八进制正整数。

【注意】
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

【提示】
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

解题思路:
将十六进制转换为二进制,一位十六进制转换为4个二进制,在将三个二进制转换为1个八进制,在将二进制转换为八进制时,记得将不能整除3的补0方便计算,同时记得判断二进制前面是否为“000“。

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String c="";
        String[] aa = new String[n];
        for (int j = 0; j < n; j++) {
            aa[j]=sc.next();
        }
        sc.close();
        for (int j=0;j<n;j++){
            c=fun(aa[j]);
            if(c.length()%3==1)
                c=0+c;
            if(c.length()%3==2)
                c=0+c;
            String strOctal = toOctal(c);
            System.out.println(strOctal);
            c="";
        }
    }
    static String fun(String a){
        String[] b={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
        StringBuffer c=new StringBuffer();
        for(int i=0;i<a.length();i++) {
            char d=a.charAt(i);
            if (d >= '0' && d <= '9')
                c.append(b[(int)d-(int)('0')]);
            else
                c.append( b[(int) d - (int) ('A') + 10]);
        }
        return c.toString();
    }
    static String toOctal(String a) {
        int len = a.length();
        int k;

        StringBuffer b = new StringBuffer();
        if (a.substring(0, 3).equals("000")) {//看看前三位是不是0,是零就从第四位开始截取
            k=3;

        } else {
            k=0;
        }

        for(int i=k;i<len-2;i+=3){
            switch (a.substring(i,i+3)){
                case "000":b.append("0");break;
                case "001":b.append("1");break;
                case "010":b.append("2");break;
                case "011":b.append("3");break;
                case "100":b.append("4");break;
                case "101":b.append("5");break;
                case "110":b.append("6");break;
                case "111":b.append("7");break;
                default:
                    break;
            }
        }
        return b.toString();
    }
}

数列排序

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
  输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9

解题思路:
这个排序用循环使用冒泡选择等排序都行,我这用的冒泡,最简单

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] a=new int[n];
        int m=0,c,t;
        for(int i=0;i<n;i++)
            a[i] = sc.nextInt();
        for(int i=0;i<n;i++)
            for(int j=i;j<n;j++){
                if(a[i]>a[j]){
                    t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
            }

        for(int i=0;i<n;i++)
            System.out.print(a[i]+" ");
    }
}
发布了9 篇原创文章 · 获赞 0 · 访问量 100

猜你喜欢

转载自blog.csdn.net/weixin_42616905/article/details/104459963