蓝桥杯练习系统--基础练习1

1、(数列排序)给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		int length = sc.nextInt();
		int a;
		int[] A=new int[length];
		for(int i=0;i<length;i++){
			A[i]=sc.nextInt();
		}
		for(int i=length/2;i>0;i=i/2){
			for(int j=i;j<length;j++){
				a=A[j];
				int b=j;
				while(b-i>=0&&a<A[b-i]){
					A[b]=A[b-i];
					b=b-i;
				}
				A[b]=a;
			}
		}
        for(int i=0;i<length;i++){
        	System.out.print(A[i]+" ");
        }
	}
}

2、(十六进制转八进制)给定n个十六进制正整数,输出它们对应的八进制数。

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		int length = sc.nextInt();
		int a;
	    char[][] A=new char[length][];
		for(int i=0;i<length;i++){
			//将输入的数转化为字符放到字符数组中
			A[i]=new StringBuilder(sc.next()).toString().toCharArray();
		}
		sc.close();//****
		for(int i=0;i<length;i++){
			//将十六进制转化为二进制
			String str1=sTot(A[i]);
			int len=str1.length();
			//二进制转为八进制
			//若不是3的倍数需要在最左端添0
			if(len%3==1) 
				str1="00"+str1;
			if(len%3==2) 
				str1="0"+str1;
			//将二进制转化为八进制
			String str2=tToe(str1);
			System.out.println(str2);
			
		}
	}
	
	//将十六进制转化为二进制
	private static String sTot(char[] A){
		StringBuilder str3=new StringBuilder();
		for(int i=0;i<A.length;i++){
			switch(A[i]){
			    case '0':
			    	str3.append("0000");
			    	break;
			    case '1':
			    	str3.append("0001");
			    	break;
			    case '2':
			    	str3.append("0010");
			    	break;
			    case '3':
			    	str3.append("0011");
			    	break;
			    case '4':
			    	str3.append("0100");
			    	break;
			    case '5':
			    	str3.append("0101");
			    	break;
			    case '6':
			    	str3.append("0110");
			    	break;
			    case '7':
			    	str3.append("0111");
			    	break;
			    case '8':
			    	str3.append("1000");
			    	break;
			    case '9':
			    	str3.append("1001");
			    	break;
			    case 'A':
			    	str3.append("1010");
			    	break;
			    case 'B':
			    	str3.append("1011");
			    	break;
			    case 'C':
			    	str3.append("1100");
			    	break;
			    case 'D':
			    	str3.append("1101");
			    	break;
			    case 'E':
			    	str3.append("1110");
			    	break;
			    case 'F':
			    	str3.append("1111");
			    	break;
			    default:
			    	break;
			}
		}
		return str3.toString();//返回对象的字符串表示
	}
	
    //将二进制转化为八进制
	private static String tToe(String str4){
		StringBuilder str5=new StringBuilder();
		int n=0;
		//转换为八进制后可能第一位为0
		if(str4.substring(0,3).equals("000"))
			n=3;
		for(int i=n;i<str4.length()-2;i+=3){
			String str6=str4.substring(i,i+3);
			switch(str6){
			    case "000":
			    	str5.append("0");
			    	break;
			    case "001":
			    	str5.append("1");
			    	break;
			    case "010":
			    	str5.append("2");
			    	break;
			    case "011":
			    	str5.append("3");
			    	break;
			    case "100":
			    	str5.append("4");
			    	break;
			    case "101":
			    	str5.append("5");
			    	break;
			    case "110":
			    	str5.append("6");
			    	break;
			    case "111":
			    	str5.append("7");
			    	break;
			    default:
			    	break;   
			}
		}
		return str5.toString();
	}
	
}

3、(十六进制转十进制)从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
        //将输入的数转化为字符放到字符数组中
		char[] A=new StringBuilder(sc.next()).toString().toCharArray();
		sc.close();//****
        long res=0;//注意用long型防止溢出
        for(int i=A.length-1;i>=0;i--){
        	if(A[i]>'0'&&A[i]<'9'){
        		//这里可以用字符相减得到整型数
        		//等式的右边也要进行强制转化
        		res+=(long)((A[i]-'0')*Math.pow(16,A.length-i-1));
        	}else{
        		//这里只能一个一个进行赋值
        		int x=0;
        		switch(A[i]){
           	    case 'A':
        	    	x=10;
        	    	break;
        	    case 'B':
        	    	x=11;
        	    	break;
        	    case 'C':
        	    	x=12;
        	    	break;
        	    case 'D':
        	    	x=13;
        	    	break;
        	    case 'E':
        	    	x=14;
        	    	break;
        	    case 'F':
        	    	x=15;
        	    	break;
        	    default:
        	    	break;
        		}
        		res+=(long)(x*Math.pow(16,A.length-i-1));
        	}
        }
        //期望输出的是整型
        System.out.print(res);
	}	
}

4、(十进制转十六进制)十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
  给出一个非负整数,将它表示成十六进制的形式。

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		//将十进制转化为二进制字符串
        long ten=sc.nextInt();
        StringBuilder two=new StringBuilder();
        if(ten==0){
        	System.out.print(0);
        }else{
            while(ten!=0){
            	if(ten%2==0){
            		two.append("0");
            	}else{
            		two.append("1");
            	}
            	ten/=2;
            }
            //如果two的长度不是4的倍数,就在前面添零
            if(two.length()%4==1){
            	two.append("000");
            }else if(two.length()%4==2){
            	two.append("00");
            }else if(two.length()%4==3){
            	two.append("0");
            }
            two.reverse();//将字符串two翻转过来
            StringBuilder sixteen=new StringBuilder();
            String str;
            for(int i=0;i<two.length()-3;i+=4){
            	str=two.substring(i,i+4);
            	switch(str){
            	    case "0000":
            	    	sixteen.append("0");
            	    	break;
            	    case "0001":
            	    	sixteen.append("1");
            	    	break;
            	    case "0010":
            	    	sixteen.append("2");
            	    	break;
            	    case "0011":
            	    	sixteen.append("3");
            	    	break;
            	    case "0100":
            	    	sixteen.append("4");
            	    	break;
            	    case "0101":
            	    	sixteen.append("5");
            	    	break;
            	    case "0110":
            	    	sixteen.append("6");
            	    	break;
            	    case "0111":
            	    	sixteen.append("7");
            	    	break;
            	    case "1000":
            	    	sixteen.append("8");
            	    	break;
            	    case "1001":
            	    	sixteen.append("9");
            	    	break;
            	    case "1010":
            	    	sixteen.append("A");
            	    	break;
            	    case "1011":
            	    	sixteen.append("B");
            	    	break;
            	    case "1100":
            	    	sixteen.append("C");
            	    	break;
            	    case "1101":
            	    	sixteen.append("D");
            	    	break;
            	    case "1110":
            	    	sixteen.append("E");
            	    	break;
            	    case "1111":
            	    	sixteen.append("F");
            	    	break;
            	}
            }
            System.out.print(sixteen);
        }
	}	
}

5、(查找整数)给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
        int length=sc.nextInt();
        int[] A=new int[length];
        for(int i=0;i<length;i++){
        	A[i]=sc.nextInt();
        }
        int tag=sc.nextInt();
        int i=0;
        for(;i<length;i++){
        	if(A[i]==tag){
        		System.out.print(i+1);
        		break;
        	}
        }
        if(i==length){
        	System.out.print(-1);
        }
	}	
}

6、(数列特征)给出n个数,找出这n个数的最大值,最小值,和。

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
        int length=sc.nextInt();
        int[] A=new int[length];
        for(int i=0;i<length;i++){
        	A[i]=sc.nextInt();
        }
        int sum=0;
        int max=A[0];
        int min=A[0];
        for(int i=0;i<length;i++){
        	if(A[i]>max)
        		max=A[i];
            if(A[i]<min){
            	min=A[i];
            }
            sum+=A[i];
        }
        System.out.println(max);
        System.out.println(min);
        System.out.println(sum);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值