蓝桥杯刷题java--入门

这篇文章通过练习3道入门题以熟练蓝桥杯的系统。
以及一道基础练习题。

入门练习一:

Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。

import java.util.Scanner;

public class Main {
	public static void main(String[] args)
	{
		Scanner scn=new Scanner(System.in);
		int n=scn.nextInt();
		if(n==1||n==2)
			System.out.println(1);
		else
		{
			int[] arr=new int[n+1];
			arr[1]=1;
			arr[2]=1;
			if(n>2)
			{	
				for(int i=3;i<=n;i++)
					arr[i]=(arr[i-1]+arr[i-2])%10007;
			}
			System.out.println(arr[n]);
		}
	}
}

这道题主要是不能够先求值再求余数,这样容易超出范围

入门练习二:

给定圆的半径r,求圆的面积。
输出格式
输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。
本题对精度要求较高,请注意π的值应该取较精确的值。你可以使用常量来表示π,比如PI=3.14159265358979323,也可以使用数学公式来求π,比如PI=atan(1.0)*4

这道题主要注意如何使用占位符。以及pi的计算

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scn=new Scanner(System.in);
		int n=scn.nextInt();
		double PI=4*Math.atan(1.00);//
		double area=n*n*PI;
		System.out.printf("%.7f",area);//
	}
}

入门练习三:

求1+2+3+…+n的值。
说明:请注意这里的数据规模。
本题直接的想法是直接使用一个循环来累加,然而,当数据规模很大时,这种“暴力”的方法往往会导致超时。此时你需要想想其他方法。你可以试一试,如果使用1000000000作为你的程序的输入,你的程序是不是能在规定的上面规定的时限内运行出来。
本题另一个要值得注意的地方是==答案的大小不在你的语言默认的整型(int)范围内,==如果使用整型来保存结果,会导致结果错误。

这道题要注意两点:
1.不能用循环累加,于是我们使用公式,也就是高斯先生当年能够成功收获一众少女芳心的解法。
2.这道题的说明提醒我们答案的大小不在整型 int 范围内,于是我很开心的不去将结果赋值给某一变量,这样就省的定义变量的类型。然而我只有50分。代码如下:

import java.util.Scanner;
public class Main {
	public static void main(String[] args)
	{
		Scanner scn=new Scanner(System.in);
		int n=scn.nextInt();
		System.out.println(n*(1+n)/2);
	}	
}

于是我左思右想,终于明白了,因为输入n的值是 int 类型的,对int 类型的操作所返回的结果也默认是 int 类型的,所以,只要将 n 的类型改一下即可。

import java.util.Scanner;
public class Main {
	public static void main(String[] args)
	{
		Scanner scn=new Scanner(System.in);
		long n=scn.nextInt();
		System.out.println(n*(1+n)/2);
	}	
}

大数进制转换

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

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

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

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

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

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

思路:我本来以为它非常简单,利用Java自带的library就很轻松解决。先将16进制通过valueOf()转化为10进制,然后通过Integer.toOctalString(int )转化为八进制就可以了。
结果我发现这样子是不行的,这玩意是大数!得用字符串。


十进制转成十六进制:  
Integer.toHexString(int i)  
十进制转成八进制  
Integer.toOctalString(int i) 
十进制转成二进制  
Integer.toBinaryString(int i) 
 
 其他进制转为十进制:
 
十六进制转成十进制  
Integer.valueOf("FFFF",16).toString() 
八进制转成十进制 
Integer.valueOf("876",8).toString()  
二进制转十进制  
Integer.valueOf("0101",2).toString() 
 
parseInt(String s, int radix)  
使用第二个参数指定的基数,将==字符串参数==解析为有符号的整数。

于是就需要将输入的十六进制数转化为2进制,然后将2进制再转化为8进制。

import java.util.Scanner;
import java.lang.Integer;

public class Main {
	public static void main(String[] args)
	{
		Scanner scn=new Scanner(System.in);
		int n=scn.nextInt();
		String[] arr=new String[n];
		for(int i=0;i<n;i++)
		{
			arr[i]=scn.next();
		}
		for(int i=0;i<n;i++)
		{
			arr[i]=toBinary(arr[i]);
			if(arr[i].length()%3==1)
				arr[i]="00"+arr[i];
			else if(arr[i].length()%3==2)
				arr[i]="0"+arr[i];
			System.out.println(toOca(arr[i]));
		}	
	}
	
	public static String toOca(String s1)
	{
		StringBuffer a=new StringBuffer();
		String s=s1.substring(0,3);
		int k=0;
		if(s.equals("000"))
			k=3;
		for(int j=k;j<s1.length()-2;j=j+3)
		{
			s=s1.substring(j, j+3);
			if(s.equals("000"))
				a.append("0");
			else if(s.equals("001"))
				a.append("1");
			else if(s.equals("010"))
				a.append("2");
			else if(s.equals("011"))
				a.append("3");
			else if(s.equals("100"))
				a.append("4");
			else if(s.equals("101"))
				a.append("5");
			else if(s.equals("110"))
				a.append("6");
			else if(s.equals("111"))
				a.append("7");	
		}
		return a.toString();
	}
	public static String toBinary(String s)
	{
		StringBuffer b=new StringBuffer();
		for(int k=0;k<s.length();k++)
		{
			String s1=s.substring(k, k+1);
			if(s1.equals("0"))
				b.append("0000");
			else if(s1.equals("1"))
				b.append("0001");	
			else if(s1.equals("2"))
				b.append("0010");
			else if(s1.equals("3"))
				b.append("0011");
			else if(s1.equals("4"))
				b.append("0100");
			else if(s1.equals("5"))
				b.append("0101");
			else if(s1.equals("6"))
				b.append("0110");
			else if(s1.equals("7"))
				b.append("0111");
			else if(s1.equals("8"))
				b.append("1000");
			else if (s1.equals("9"))
				b.append("1001");
			else if(s1.equals("A"))
				b.append("1010");
			else if(s1.equals("B"))
				b.append("1011");
			else if(s1.equals("C"))
				b.append("1100");
			else if (s1.equals("D"))
				b.append("1101");
			else if(s1.equals("E"))
				b.append("1110");	
			else if(s1.equals("F"))
				b.append("1111");
		}
		return b.toString();
	}
}
发布了56 篇原创文章 · 获赞 4 · 访问量 3179

猜你喜欢

转载自blog.csdn.net/qq_43720551/article/details/105328675