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题)。