不说什么了,从最基础的开始吧。不论多简单的题目,自己不动手敲一遍是不可能深刻理解的。嘴上说说谁都会。
2018.3.25
Java基础50题系列源码已上传到我的github仓库,有需要的可以自取,欢迎大家提出建议
https://github.com/Lawliet0717/Java-foudamental-50-problems
第一题 ##
题目:原题是生兔子的问题
思路:其实就是斐波那契问题
package Java基础50题;
import java.util.*;
/*
* Lawliet.2018.3.21
*/
//斐波那契问题
public class example_01 {
public static long fibonacci(int n){
if(n == 0){
return 0;
}else if(n == 1){
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2) ;
}
public static void main(String args[]){
Scanner in = new Scanner(System.in);
System.out.print("请输入年份:");
int n = in.nextInt();
long res = fibonacci(n);
System.out.println("现在已经有" + res + "只兔子拉!");
}
}
第2题
原题:判断101-200之间有多少个素数
思路:2个循环,第二个循环里从1开始判断是不是某数的因数,如果某数只有2个因数(1和它本身),那么就是素数
package Java基础50题;
/*
* Lawliet.2018.3.21
*/
//判断101-200之间有多少个素数
public class example_02 {
public static void main(String args[]){
int factor = 0;
int num = 0;
for(int i = 101; i <= 200; i++){
for(int j = 1; j <= i; j++){
if(i % j == 0){
factor++;
}
}
if(factor == 2){
num++;
System.out.print(i + " ");
}
factor = 0;
}
System.out.println();
System.out.println("101-200之间一共有 " + num + " 个素数" );
}
}
第3题
原题:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
思路:理解怎么求一个三位数的个位,十位,百位上的数字
package Java基础50题;
/*
* Lawliet.2018.3.21
*/
/*
* 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
* 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
*/
public class example_03 {
public static void main(String args[]){
int x,y,z;//分别代表百位数字,十位数字,个位数字
double sum;
for(int i = 100; i <= 999; i++){
z = i % 10;//个位数:除10取余
y = (i / 10) % 10;//十位数:除10之后,再除10取余
x = i / 100;//百位数:除100取余
sum = Math.pow(x, 3) + Math.pow(y, 3) + Math.pow(z, 3);
if(sum == i){
System.out.println(i);
}
}
}
}
第4题
原题:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
思路:对一个正整数来说,从2开始尝试,如果是的话,除2得商,用商继续求质因数
package Java基础50题;
import java.util.*;
/*
* Lawliet.2018.3.21
*/
//将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
public class example_04 {
public static void main(String args[]){
int x;
Scanner in = new Scanner(System.in);
System.out.println("输入一个正整数");
x = in.nextInt();
new PrimeSplit(x);
}
public static class PrimeSplit{
int k = 2;
public PrimeSplit(int x){
if(x <= 1){
System.out.println("无效!");
}else if(x == 2){
System.out.println("输入的正整数 =1*" + x);
}else{
System.out.print("输入的正整数 =1");
while(k <= x){
if(x % k == 0){
System.out.print("*" + k);
x = x/k;
}else{
k++;
}
}
}
}
}
}
第5题
原题:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
思路:?:运算符的理解运用
package Java基础50题;
import java.util.*;
/*
* Lawliet.2018.3.21
*/
//利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
public class example_05 {
public static void judgeScore(int x){
char grade = 'A';
grade = x >= 90 ? 'A' : (x < 60 ? 'C' : 'B');
System.out.println("你的等级是:" + grade);
}
public static void main(String args[]){
Scanner in = new Scanner(System.in);
System.out.println("请输入你的成绩:");
int x;
x = in.nextInt();
judgeScore(x);
}
}
第6题
原题:输入两个正整数m和n,求其最大公约数和最小公倍数
思路:求公约数用辗转求余法,记得把大数放前面
求公倍数用大数的1倍,2倍,3倍,依次类推来尝试
package Java基础50题;
import java.util.*;
/*
* Lawliet.2018.3.22
*/
//输入两个正整数m和n,求其最大公约数和最小公倍数
public class example_06 {
public static class gcdlcm{
public int gcd(int m, int n){
if(m < n){
int tmp = m;
m = n;
n = tmp;
}
if(m % n == 0){
return n;
}else{
m %= n;
return gcd(m , n);
}
}
public int lcm(int m, int n){
if(m < n){
int tmp = m;
m = n;
n = tmp;
}
int res = m;
int i = 2;
while(res % n != 0){
res = m * i;
}
return res;
}
}
public static void main(String args[]){
int m = 20;
int n = 5;
gcdlcm res = new gcdlcm();
System.out.println(res.gcd(m, n));
System.out.println(res.lcm(m, n));
}
}
第7题
原题:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
思路:”理解String类型的tochararray()函数,将一个字符串转换成字符数组
理解Character.isxxx函数,怎么判断字母,空格,数字
package Java基础50题;
import java.util.*;
/*
* Lawliet.2018.3.22
*/
//输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
public class example_07 {
public static void main(String[] args){
int letterNum = 0;
int spaceNum = 0;
int digitNum = 0;
int otherNum = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入一段字符串");
String str;
str = in.nextLine();
char[] ch = str.toCharArray();
for(int i = 0; i < ch.length; i++){
if(Character.isLetter(ch[i])){
letterNum++;
}else if(Character.isSpaceChar(ch[i])){
spaceNum++;
}else if(Character.isDigit(ch[i])){
digitNum++;
}else{
otherNum++;
}
}
System.out.println("字母个数为:" + letterNum);
System.out.println("空格个数为:" + spaceNum);
System.out.println("字符个数为:" + digitNum);
System.out.println("其他个数为:" + otherNum);
}
}
第8题
原题:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
思路:数学问题,假如是1+11+111 就是 1 + (1*10+1) + (1*10² + 11),依次类推
package Java基础50题;
import java.util.*;
/*
* Lawliet.2018.3.22
*/
/*求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),
*几个数相加由键盘控制。
*/
public class example_08 {
public static void main(String[] args){
int res;
res = calculate(2, 5);
System.out.println(res);
}
public static int calculate(int base, int totalTime){
int res = 0;
int time = 0;
int nowdate = 0;
int lastdate = 0;
while(time < totalTime){
nowdate = (int) (base * Math.pow(10, time++) + lastdate);
res += nowdate;
if(time == totalTime ){
System.out.print(nowdate + "=");
}else{
System.out.print(nowdate + "+");
}
lastdate = nowdate;
}
return res;
}
}
第9题
原题:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程 找出1000以内的所有完数。
思路:简单的2层循环
package Java基础50题;
/*
* Lawliet.2018.3.22
*/
//一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
public class example_09 {
public static void main(String[] args){
for(int i = 2; i < 1000; i++){
int sum = 0;
for(int j = 1; j < i; j++){
if(i % j == 0){
sum = sum + j;
}
}
if(sum == i){
System.out.println(i);
}
}
}
}
第10题
原题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
思路:每次反弹的高度是原来高度的0.5倍,每次走过的高度是原来的高度的1.5倍
package Java基础50题;
import java.util.*;
/*
* Lawliet.2018.3.22
*/
/*
* 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
* 求它在第10次落地时,共经过多少米?第10次反弹多高?
*/
public class example_10 {
public static void ball(int times){
double curHeight = 100;
double totalHeight = 0;
for(int i = 0; i < times; i++){
totalHeight += 1.5 * curHeight;
curHeight *= 0.5;
}
System.out.println("现在的高度是:" + curHeight + "米");
System.out.println("一共经过" + totalHeight + "米");
}
public static void main(String[] args){
int times;
Scanner in = new Scanner(System.in);
System.out.println("请输入小球反弹次数:");
times = in.nextInt();
ball(times);
}
}