蓝桥杯——入门训练篇

1.A+B问题

package _1_begin;
import java.util.Scanner;
public class _1_ABAdd {
	public static void main(String[] args) {
		add();
	}
	public static void add() {
		Scanner sc=new Scanner(System.in);
		int a=sc.nextInt();
		int b=sc.nextInt();
//		不同于下一题序列求和,这是两个数相加,结果没有那么大。
		int add=a+b;
		System.out.println(add);
	}
}

2.序列求和

package _1_begin;
import java.util.Scanner;
public class _2_SequenceSummation {
	public static void main(String[] args) {
		gaosi();
	}
	public static void gaosi() {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
//		第一次做错了,因为sum的类型放不下大数据的和!!
//		本题要值得注意的地方是答案的大小不在你的语言默认的整型(int)范围内,如果使用整型来保存结果,会导致结果超时。
		long sum=0;
		int i=1;
		while(i<=n) {
			sum+=i;
			i++;
		}
		System.out.println(sum);
	}
}

3.圆的面积

package _1_begin;
import java.util.Scanner;
public class _3_AreaOfCircle {
	public static void main(String[] args) {
		printArea();
	}
	public static void printArea() {
		Scanner sc=new Scanner(System.in);
		int r=sc.nextInt();
		double s=Math.PI*r*r;
//		积累:格式化输出的结果就是四舍五入完的!!!
		System.out.printf("%.7f",s);
		
		
/*		虽然没用到Java取整(注意只是取整)的方法,但可以看看:
 		 1.https://www.cnblogs.com/testerlina/p/11349456.html之
		 Math.ceil(double a)向上舍入,将数值向上舍入为最为接近的整数,返回值是double类型
	     Math.floor(double a)向下舍入,将数值向下舍入为最为接近的整数,返回值是double类型
	     Math.round(float a)标准舍入,将数值四舍五入为最为接近的整数,返回值是int类型
	     Math.round(double a)标准舍入,将数值四舍五入为最为接近的整数,返回值是long类型
	     
	     2.double d;  //d为需要四舍五入的浮点数
		 int i=(int)(d+0.5); //i为四舍五入后的整数
		 
		 3.https://blog.csdn.net/fragrant_no1/article/details/84133974
*/
	}
}

4.Fibonacci数列

package _1_begin;
import java.util.Scanner;
public class _4_Fibonacci {
	public static void main(String[] args) {
//		fibonacci1();
		fibonacci2();
//		fibonacci3();
	}
/*
//	这样做结果不对,因为第n个数求出后,a=b b=c这两句改变了a、b的值(这是下一个循环的a、b),故错误。
	public static void fibonacci1() {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int a = 1;
		int b = 1;
		int c = 0;
		int res = 0;
		for (int i = 3; i <= n; i++) {
//			错误处,并且没有对1,2这两种特殊情况进行处理!!
			c = a + b;
			a = b;
			b = c;
		}
		res = (a + b) % 10007;
		System.out.println(res);
	}
*/
	
//	思路:可以把原来的递推公式转换成:Fn=(Fn-1 + Fn-2)%10007!! n=22是临界,已验证,这道题可以用这个公式推算。
//	此方法较为节省内存
	public static void fibonacci2() {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int res = 0;
		int a = 1;
		int b = 1;
		if (n == 1 || n == 2) {
//			注意:这里无论是1还是2,结果都是1%10007,因为求的是前两项和对10007取余的结果!!
			System.out.println(1 % 10007);
		} else {
			for (int i = 3; i <= n; i++) {
				res = (a + b) % 10007;
				a = b;
				b = res;
			}
			System.out.println(res);
		}
	}

	/*
//	用数组做没有上面的方法节省内存
	public static void fibonacci3() {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
//		注意:这里数组长度为n+1,输入n=1时,长度是n+1=2(即:ia[0]、ia[1])
		int[] ia = new int[n+1];
		ia[0] = 1;
		ia[1] = 1;
		for (int i = 2; i < n; i++) {
			ia[i] = (ia[i - 1] + ia[i - 2]) % 10007;
		}
		System.out.println(ia[n - 1]);
	}
	*/
}

总结:入门训练里的这4道题虽然挺简单的,但是细节问题要注意,比如数据类型的选取(1、2题)等;四舍五入格式问题(3题),可以直接用printf,也可以用其他方法,这里面涉及到的向上向下取整还不太明白,需要后期完善;还要有转换思维(4题)。

发布了27 篇原创文章 · 获赞 2 · 访问量 942

猜你喜欢

转载自blog.csdn.net/wcy8733996wcy/article/details/104290258