25道经典Java算法题
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
//这是一个菲波拉契数列问题
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
public class test01 { public static void main(String[] args) { int f1= 1 ,f2= 1 ,f; int M= 30 ; System.out.println( 1 ); System.out.println( 2 ); for ( int i= 3 ;i<m;i++) { f=f2; f2=f1+f2; f1=f; System.out.println(f2); } } } |
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
public class test02 { public static void main(String[] args) { int count= 0 ; for ( int i= 101 ;i< 200 ;i+= 2 ) { boolean flag= true ; for ( int j= 2 ;j<=Math.sqrt(i);j++) { if (i%j== 0 ) { flag= false ; break ; } } if (flag== true ) { count++; System.out.println(i); } } System.out.println(count); } } |
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
01
02
03
04
05
06
07
08
09
10
11
12
13
|
public class test03 { public static void main(String[] args) { int a,b,c; for ( int i= 101 ;i< 1000 ;i++) { a=i% 10 ; b=i/ 10 % 10 ; c=i/ 100 ; if (a*a*a+b*b*b+c*c*c==i) System.out.println(i); } } } |
题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
import java.util.Scanner; public class test04 { public static void main(String[] args) { Scanner input= new Scanner(System.in); int n=input.nextInt(); int k= 2 ; while (n>=k) { if (n==k) { System.out.println(k); break ; } else if (n%k== 0 ) { System.out.println(k); n=n/k; } else { k++; } } } } |
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
import java.util.Scanner; public class test05 { public static void main(String[] args) { Scanner input= new Scanner(System.in); int score=input.nextInt(); char grade=score>= 90 ? 'A' :score>= 60 ? 'B' : 'C' ; System.out.println(grade); } } |
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 /*在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。 /
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import java.util.Scanner; public class test06 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a=input.nextInt(); int b=input.nextInt(); test06 test= new test06(); int i = test.gongyinshu(a, b); System.out.println( "最小公因数" +i); System.out.println( "最大公倍数" +a*b/i); } public int gongyinshu( int a, int b) { if (a<b) { int t=b; b=a; a=t; } while (b!= 0 ) { if (a==b) return a; int x=b; b=a%b; a=x; } return a; } } |
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import java.util.Scanner; public class test07 { public static void main(String[] args) { int abccount= 0 ; int spacecount= 0 ; int numcount= 0 ; int othercount= 0 ; Scanner input= new Scanner(System.in); String toString=input.nextLine(); char [] ch=toString.toCharArray(); for ( int i= 0 ;i<ch.length;i++) { if (Character.isLetter(ch[i])) { abccount++; } else if (Character.isDigit(ch[i])) { numcount++; } else if (Character.isSpaceChar(ch[i])){ spacecount++; } else { othercount++; } } System.out.println(abccount); System.out.println(spacecount); System.out.println(numcount); System.out.println(othercount); } } |
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
import java.util.Scanner; public class test08 { public static void main(String[] args) { Scanner input= new Scanner(System.in); int a=input.nextInt(); int n=input.nextInt(); int sum= 0 ,b= 0 ; for ( int i= 0 ;i<n;i++) { b+=a; sum+=b; a=a* 10 ; } System.out.println(sum); } } |
题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public class test09 { public static void main(String[] args) { for ( int i= 1 ;i<= 1000 ;i++) { int t = 0 ; for ( int j= 1 ;j<=i/ 2 ;j++) { if (i%j== 0 ) { t+=j; } } if (t==i) { System.out.println(i); } } } } |
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
public class test10 { public static void main(String[] args) { double h= 100 ; double s= 100 ; for ( int i= 1 ;i<= 10 ;i++) { h=h/ 2 ; s=s+ 2 *h; } System.out.println(s); System.out.println(h); } } |
题目:有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?并把他们都输入。 public
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
class test11 { public static void main(String[] args) { int count= 0 ; for ( int i= 1 ;i< 5 ;i++) { for ( int j= 1 ;j< 5 ;j++) { for ( int k= 1 ;k< 5 ;k++) { if (i!=j&&j!=k&&i!=k) { count++; System.out.println(i* 100 +j* 10 +k); } } } } System.out.println(count); } } |
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数? import java.util.Scanner;public class
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
test12 { public static void main(String[] args) { Scanner input = new Scanner(System.in); double x=input.nextDouble(); double y= 0 ; if (x> 0 &&x<= 10 ) { y=x* 0.1 ; } else if (x> 10 &&x<= 20 ) { y= 10 * 0.1 +(x- 10 )* 0.075 ; } else if (x> 20 &&x<= 40 ) { y= 10 * 0.1 + 10 * 0.075 +(x- 20 )* 0.05 ; } else if (x> 40 &&x<= 60 ) { y= 10 * 0.1 + 10 * 0.075 + 20 * 0.05 +(x- 40 )* 0.03 ; } else if (x> 60 &&x<= 100 ) { y= 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 +(x- 60 )* 0.015 ; } else if (x> 100 ) { y= 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 +(x- 100 )* 0.01 ; } System.out.println(y); } } |
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1
2
3
4
5
6
7
8
9
|
public class test13 { public static void main(String[] args) { for ( int i=- 100 ;i< 10000 ;i++) { if (Math.sqrt(i+ 100 )% 1 == 0 &&Math.sqrt(i+ 268 )% 1 == 0 ) { System.out.println(i); } } } } |
题目:输入某年某月某日,判断这一天是这一年的第几天?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import java.util.*; public class lianxi14 { public static void main(String[] args) { int year, month, day; int days = 0 ; int d = 0 ; int e; input fymd = new input(); do { e = 0 ; System.out.print( "输入年:" ); year =fymd.input(); System.out.print( "输入月:" ); month = fymd.input(); System.out.print( "输入天:" ); day = fymd.input(); if (year < 0 || month < 0 || month > 12 ||day < 0 || day > 31 ) { System.out.println( "输入错误,请重新输入!" ); e= 1 ; } } while ( e== 1 ); for ( int i= 1 ; i <month; i++) { switch (i) { case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : days = 31 ; break ; case 4 : case 6 : case 9 : case 11 : days = 30 ; break ; case 2 : if ((year % 400 == 0 ) || (year % 4 == 0 && year % 100 != 0 )) { days = 29 ; } else { days = 28 ; } break ; } d += days; } System.out.println(year + "-" + month + "-" + day + "是这年的第" +(d+day) + "天。" ); } } class input{ public int input() { int value = 0 ; Scanner s = new Scanner(System.in); value = s.nextInt(); return value; } } |
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import java.util.Scanner; public class test15 { public static void main(String[] args) { Scanner input= new Scanner(System.in); int x=input.nextInt(); int y=input.nextInt(); int z=input.nextInt(); int t= 0 ; if (x>y) { t=x; x=y; y=t; } if (y>z) { t=z; z=y; y=t; } if (x>y) { t=x; x=y; y=t; } System.out.println(x+ "" +y+ "" +z); } } |
题目:输出9*9口诀。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
public class test16 { public static void main(String[] args) { for ( int i= 1 ;i< 10 ;i++){ for ( int j= 1 ;j<=i;j++) { System.out.print(i+ "*" +j+ "=" +i*j); System.out.print( " " ); } System.out.println( "" ); } } } |
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
public class test17 { public static void main(String[] args) { int x= 1 ; for ( int i= 10 ;i> 1 ;i--) { x=(x+ 1 )* 2 ; } System.out.println(x); } } |
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public class test18 { public static void main(String[] args) { for ( char i= 'x' ;i<= 'z' ;i++) { for ( char j= 'x' ;j<= 'z' ;j++) { if (i!=j) { for ( char k= 'x' ;k<= 'z' ;k++) { if (i!=k&&j!=k) { if (i!= 'x' &&j!= 'x' &&j!= 'z' ) { System.out.println( "a:" +i+ "\nb:" +j+ "\nc:" +k); } } } } } } }} |
题目:打印出图案(菱形)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public class lianxi19 { public static void main(String[] args) { int H = 7 , W = 7 ; //高和宽必须是相等的奇数 for ( int i= 0 ; i<(H+ 1 ) / 2 ; i++) { for ( int j= 0 ; j<w System.out.print( " " ); } for ( int k= 1 ; k<(i+ 1 )* 2 ; k++) { System.out.print( '*' ); } System.out.println(); } for ( int i= 1 ; i<=H/ 2 ; i++) { for ( int j= 1 ; j<=i; j++) { System.out.print( " " ); } for ( int k= 1 ; k<=W- 2 *i; k++) { System.out.print( '*' ); } System.out.println(); } } } |
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
01
02
03
04
05
06
07
08
09
10
11
|
public class test20 { public static void main(String[] args) { double sum= 0 ,ver= 2 ; for ( int i= 1 ;i<= 10 ;i++) { sum+=ver/i; ver+=i; } System.out.println(sum); } } |
题目:求1+2!+3!+…+20!的和
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
public class test21 { public static void main(String[] args) { long sum= 0 ,ver= 1 ; for ( int i= 1 ;i<= 20 ;i++) { ver=ver*i; sum+=ver; } System.out.println(sum); }} |
题目:利用递归方法求5!。
01
02
03
04
05
06
07
08
09
10
11
12
|
public class test22 { public static void main(String[] args) { System.out.println(fac( 5 )); } public static int fac( int i) { if (i== 1 ) return 1 ; else { return i*fac(i- 1 ); } } } |
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
01
02
03
04
05
06
07
08
09
10
|
public class test23 { public static void main(String[] args) { int age= 10 ; for ( int i= 2 ;i<= 5 ;i++) { age+= 2 ; } System.out.println( age); } } |
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
//使用了长整型最多输入18位
01
02
03
04
05
06
07
08
09
10
11
12
13
|
import java.util.Scanner; public class test24 { public static void main(String[] args) { Scanner input= new Scanner(System.in); String toString=input.nextLine(); char [] num=toString.toCharArray(); System.out.println(num.length); for ( int i=num.length;i> 0 ;i--) { System.out.print(num[i- 1 ]); } } } |
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import java.util.Scanner; public class test25 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int numtest=input.nextInt(); System.out.println(ver(numtest)); } public static boolean ver( int num) { if (num< 0 ||(num!= 0 &&num% 10 == 0 )) return false ; int ver= 0 ; while (num>ver) { ver=ver* 10 +num% 10 ; num=num/ 10 ; } return (num==ver||num==ver/ 10 ); } } |
25道经典Java算法题的更多相关文章
- 40道经典java多线程面试题
40道经典java多线程面试题 题目来源 看完了java并发编程的艺术,自认为多线程"大成",然后找了一些面试题,也发现了一些不足. 一下问题来源于网上的博客,答案均为本人个人见解 ...
- 一道java算法题分析
最近在面试中遇到这样的一道算法题: 求100!的结果的各位数之和为多少? 如:5!=5*4*3*2*1=120,那么他们的和为1+2+0=3这道题不算难,不过倒是注意的细节也有 ...
- 剑指offer中经典的算法题之从头到尾打印链表
话不多说上代码: 我自己的算法是: /** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int ...
- 50道java算法题(一)
[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1 ...
- php最常见最经典的算法题
1.一群猴子排成一圈,按1,2,…,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫 ...
- php 经典的算法题你懂的
有5个人偷了一堆苹果,准备在第二天分赃.晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了.没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的 ...
- 面试-java算法题
1.编写一个程序,输入n,求n!(用递归的方式实现). public static long fac(int n){ if(n<=0) return 0; else if(n==1) retur ...
- C++经典面试算法题
转自:http://blog.csdn.net/f_r_e_e_x/article/details/50770907 //1.实现strcpy. char* MyStrCpy( char *pDest ...
- python经典面试算法题1.4:如何对链表进行重新排序
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.4 对链表按照如下要求重新排序 [微软笔试题] 难度系数: ...
随机推荐
- go反射原理
go反射原理 本文基于go1.13.15 1.go汇编 1.1 基本语法 go采用plan9的汇编器完成汇编,有下面几个重要的伪寄存器 FP: Frame pointer: 局部变量访问 PC: Pr ...
- CSP-S 2020 初赛
游记 游记个鬼啊跨条街就到了=-= 不分Day反正就一天. 9:30开考,8:30起床. 下雨了,一出宿舍门整个学校全被白色的雾气笼罩.愚以为这是祥瑞之气,昨夜似有麒麟貔貅路过,祝我今日初赛RP++ ...
- Python基础之实现界面和代码分离
第一步:用QT Designer画一个TreeWidget,存为treeview4.ui,这个处理前面TreeWidget那一节讲过,这里不细讲 treeview4.py # -*- coding: ...
- PowerProto: gRPC工具链(protoc, protoc-gen-go)的一键安装与版本控制
PowerProto: gRPC工具链(protoc, protoc-gen-go)的一键安装与版本控制 中文 | English 项目地址:An awesome version control t ...
- Jenkins(8080)未授权访问
下载地址http://mirrors.jenkins.io/debian/ 测试 浏览器访问http://localhost:8080/manage可以直接访问 点击脚本命令行 println &qu ...
- AWS 安全信息泄露-----21天烧了27万
安全问题一直都是个老生常谈的话题,对于我们做IT的来说,是更为重视的.从使用开发工具的是否授权合规,到从事的工作内容是否合法.我们都应该认真的思考一下这些问题,毕竟我们要靠IT这门手艺吃饭. 2021 ...
- Linux 数据库操作(一)
我们可以将用于数据服务的数据库分为关系型数据库和非关系型数据库,关系型数据库最典型的就是Mysql,以及和他同源的MariaDB数据库,oracle等,非关系型数据库则有redis数据库,mongod ...
- 高效JAVA之用静态工厂方法代替构造器
程序员这行干的久了,总会染上一些恶习,我就染上一个让人深恶痛绝,自己却津津乐道的习惯,还不想改的那种,它可以叫做强迫症,也可以叫做洁癖.那就是我不允许我的IDEA出现一点点警告,什么黄色背景,绿色波浪 ...
- Tensor:Pytorch神经网络界的Numpy
摘要:Tensor,它可以是0维.一维以及多维的数组,你可以将它看作为神经网络界的Numpy,它与Numpy相似,二者可以共享内存,且之间的转换非常方便. 本文分享自华为云社区<Tensor:P ...
- rot位移密码详解(rot5、rot13、rot18、rot47)
最近训练CTF的时候,发现密码学这块的知识不太系统,所以自己接下来会陆陆续续整理出来 rot密码 rot密码其实可以看作是凯撒密码的一种变式 本质都是移位运算 rot密码按种类大致分为以下几类 rot ...