java基础算法题
为了提高自己的代码能力和算法能力,我决定每天学习一道算法题,吸收前辈思想。
【程序1】 TestRabbit.java
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子数量的规律为数列:1,1,2,3,5,8,13.....其实就是斐波那契数列 使用递归就可以实现
/**
* 兔子问题
* 2016/5/9
* 斐波那契数列求值
*题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
*小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
*/
package org; import java.util.Scanner;
public class TestRabbit { public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int num = fun(n);
System.out.println("第"+n+"个月的兔子总数为:"+num);
} public static int fun(int n){
if(n == 1 || n ==2){
return 1;
}else{
return (fun(n-1) + fun(n-2));
} } }
TestRabbit.java
【程序2】DaffodilsNum.java
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
/**
* 题目:水仙花数
* 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
* 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
*
* 2016/5/10
*/
package org; public class DaffodilsNum { public static void main(String[] args) {
for(int i = 100; i <= 999; i++){
int a = i % 10; //个位数
int b = (i / 10) % 10; //十位数
int c = i / 100; //百位数
int sum = a*a*a +b*b*b + c*c*c;
if(i == sum){
System.out.println("水仙花数:"+i);
}
}
}
}
DaffodilsNum.java
【程序3】FenJie.java
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
/**
* 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
* 2016/5/11
*/
package org; import java.util.Scanner; public class FenJie { public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num1 = input.nextInt();
int num = num1;
int k = 2;
//方法一:循环
while(num > k){
if(num % k ==0){
System.out.print(k + " * ");
num = num / k;
} else{
k++;
}
}
System.out.print(k);
System.out.println();
// 方法二:递归
fun(num1); } public static void fun(int num){
int i ;
if(num == 1 ){
return;
}else{
for(i = 2; i <= num; i++){
if(num % i ==0){
System.out.print(i + " * ");
break;
}
}
fun(num/i);
} } }
FenJie
【程序4】GcdTest.java后者是辗转相除法
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
/**
* 求其最大公约数和最小公倍数。
* 2016/5/12
*/ package org; public class GcdTest { public static void main(String[] args) {
int a = 18;
int b = 124;
int a_x = a;
int b_x = b;
//保证a > b
if( a < b ){
int num = a;
a = b;
b = num;
}
int num = b;
do{
if (a % b == 0){
System.out.println("最大公约数为:" + b);
System.out.println("最小公倍数为"+a_x*b_x/b);
return;
}else{
num = a % b;
a = b;
b = num;
}
}while(b != 0); } }
【程序5】 StChar.java
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
/**
* 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
* 2016/5/13
*/
package org; import java.util.Scanner;
public class StrIdentify { public static void main(String[] args) {
int letter = 0;
int number = 0;
int blank = 0;
int other = 0;
Scanner input = new Scanner(System.in);
String str = input.nextLine();
char[] ch = str.toCharArray();
for(int i = 0; i < ch.length; i++){ if (Character.isLetter(ch[i])){ //字母
letter++;
} else if(Character.isDigit(ch[i])){ //数字
number++;
}else if(Character.isSpaceChar(ch[i])){ //空格
blank++;
} else{ //其他
other++;
}
}
System.out.println("字母个数为: " + letter);
System.out.println("数字个数为: " + number);
System.out.println("空格个数为: " + blank);
System.out.println("其他字符个数为: " + other);
} }
【程序6】 TestAdd.java
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
/**
* java
* 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
* 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
*( 201265
**/
package org; import java.util.Scanner;
public class TestAdd {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入两个数,第一个数表示这些相同的数字,第二个数表示共有几个数相加");
System.out.println("请输入数字0-9");
int num_x = input.nextInt();
System.out.println("请输入有多少个数相加");
int n = input.nextInt();
int sum = 0;
for(int i = 0; i < n; i++){
sum += ( num_x * (n-i) * Math.pow(10,i));
}
System.out.println("这些数相加的和为: " + sum); } }
【程序7】 WanShu.java
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
/**
* java 完数
* 2016/5/16
**/
package org; import java.util.Scanner;
public class WanShu { public static void main(String[] args) {
for(int i = 1; i <= 1000; i++){
Wanshu(i);
}
} public static void Wanshu(int n){ int num = 1;
for(int i = 2; i < n; i ++){
if( n % i == 0 ){
num += i;
}
}
if(num == n){
System.out.println("完数: " + n); } } }
【程序8】TestBall.java
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
/**
* 2016/5/17
* 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
*/
package org; public class TestBall {
public static void main(String[] args) { double a = 100;
double sum = 100;
for (int i = 2; i <= 10; i++) {
a = a * 0.5;
sum = sum + a * 2;
}
System.out.println("10次共反弹" + sum + "米; 反弹距离:"+ a);
}
}
【程序9】 TestTN.java
题目:有、、、个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
/**
* 2016/5/18
* 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*/
package org; public class TestTN {
public static void main(String [] args){
int a;
int b;
int c;
int num = 0;
for(a = 1; a < 5; a++){
for(b = 1; b < 5; b++){
for(c = 1; c < 5; c++){
if(a != b && b != c && a != c){
num++;
System.out.println("第" + num + "个数:" + a + b +c);
}
}
}
}
}
}
【程序10】FindNumber.java
题目:一个整数,它加上后是一个完全平方数,再加上又是一个完全平方数,请问该数是多少?(只在十万以内讨论)
/**
* 2016/5/19
* 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
*/
package org; public class FindNumber {
public static void main(String[] args){
for(int i = 1; i <= 100000; i++){
if(Math.sqrt(i + 100) % 1 == 0 && Math.sqrt(i +168) % 1 == 0){
System.out.println(i);
}
}
}
}
【程序11】题目:输入某年某月某日,判断这一天是这一年的第几天?
/**
* 2016/5/20
* 题目:输入某年某月某日,判断这一天是这一年的第几天?
*/
package org; import java.util.Scanner; public class TestDay {
public static void main(String[] args){
System.out.println("请输入日期:(用空格隔开)");
Scanner input = new Scanner(System.in);
int year = input.nextInt();
int month = input.nextInt();
int day = input.nextInt();
int dayNumber = 0;
if((year % 4 ==0 && year % 100 == 0) || year % 400 == 0){ //闰年
int day_num[] = {31,28,31,30,31,30,31,31,30,31,30,31};
for(int i = 1; i < month; i++){
dayNumber += day_num[i];
}
dayNumber += day;
}else{
int day_num[] = {31,29,31,30,31,30,31,31,30,31,30,31};
for(int i = 1; i < month; i++){
dayNumber += day_num[i];
}
dayNumber += day;
}
System.out.println(year + "年" + month +"月" + day + "日是" + year + "的第" + dayNumber +"天~~" );
}
}
【程序12】Nine.java
题目:输出9*9口诀。
/**
* 2016/5/21
* 题目:输出9*9口诀。
*/
package org; public class Nine {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(i + "*" + j + "=" +i * j + " " + "\t");
}
System.out.println();
}
}
}
【程序13】MonkeyEatPeach.java
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天 剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
/**
* 2016/5/22
* 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
* 又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天
* 剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
*/
package org; public class MonkeyEatPeach {
public static void main(String[] args){
int num = 1;
System.out.println("第" + 10 + "天剩余的桃子:" + num);
for (int i = 9; i >= 1; i--){
num = (num + 1) * 2;
System.out.println("第" + i + "天剩余的桃子:" + num);
}
System.out.println(num);
} }
【程序14】LingXing.java
题目:打印出如下图案
*
***
******
********
******
***
*
/**
* 2016/5/23
* 题目:打印出如下图案(菱形)
* *
* ***
* ******
* ********
* ******
* ***
* *
*/
package org; public class LingXing {
public static void main(String[] args){
int[] arr = { 1, 3, 6, 8, 6, 3, 1 };
int[] arr_x = {2,8,11};
for (int i = 0; i < 4; i++) {
for (int j = 0; j < arr[i]; j++) {
System.out.print("*");
}
System.out.println("");
}
for (int i = 4; i < arr.length; i++) {
for (int j = 0; j < arr_x[i-4]; j++) {
System.out.print(" ");
}
for (int j = 0; j < arr[i]; j++) {
System.out.print("*");
}
System.out.println("");
}
}
}
【程序15】TestAdd2.java
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
/**
* 2016/5/24
* 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
*/
package org; public class TestAdd2 {
public static void main(String[] args){
double x = 2.0;
double y = 1;
double sum = 2.0;
System.out.print(x + "/" + y + " ");
for(int i = 0; i < 20; i++){
double y_1 = y;
y = x;
x = x + y_1;
sum = sum + x/y;
// System.out.print(x + "/" + y + " ");
}
System.out.println("\n 总和:" + sum);
} }
【程序16】TestJieCheng.java
题目:求1+2!+3!+...+20!的和
/**
* 2016/5/25
* 题目:求1+2!+3!+...+20!的和
*
*/
package org; public class TestJieCheng {
public static void main(String[] args){
int sum = 0;
int data = 1;
for(int i = 1; i <= 20; i++){
data = data*i;
sum += data;
}
System.out.println(sum);
}
}
【程序17】TestAge.java
题目:有个人坐在一起,问第五个人多少岁?他说比第个人大岁。问第个人岁数,他说比第个人大岁。问第三个人,又说比第人大两岁。问第个人,说比第一个人大 两岁。最后问第一个人,他说是岁。请问第五个人多大?
/**
* 2016/5/25
* 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
* 问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大
* 两岁。最后问第一个人,他说是10岁。请问第五个人多大?
*/
package org; import sun.management.Agent; public class TestAge {
public static void main(String[] args){
System.out.println(Age(5));
}
public static int Age(int n){
if(n == 1){
return 10;
}else{
return 2+Age(n - 1);
}
} }
【程序18】TestNumber.java
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
/**
* 2016/5/26
* 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
*/
package org; public class TestNumber {
public static void main(String[] args){
int num = (int)(1 + Math.random()*(10000 - 1 +1));
System.out.println(num+ " ");
String num_string = num+"";
System.out.println("位数:" + num_string.length());
char[] num_char = num_string.toCharArray();
for(int i = num_string.length()-1; i >= 0; i--){
System.out.print(num_char[i]);
}
}
}
【程序19】 SuShu.java
题目:求100之内的素数
/**
* 2016/5/27
* 题目:求100之内的素数
*/
package org;
public class SuShu {
public static void main(String[] args){
int a;//标记
System.out.println(2 + " ");
for(int i = 1; i <= 100; i+=2){
a = 1;
for(int j = 2; j < i; j++){
if(i % j == 0) {
a = -1;
break;
}
}
if(a == 1){
System.out.println(i + " ");
}
}
}
}
【程序20】YangHui.java
题目:打印出杨辉三角形(要求打印出10行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
java基础算法题的更多相关文章
- Java基础算法集50题
最近因为要准备实习,还有一个蓝桥杯的编程比赛,所以准备加强一下算法这块,然后百度了一下java基础算法,看到的都是那50套题,那就花了差不多三个晚自习的时间吧,大体看了一遍,做了其中的27道题,有一些 ...
- 10道java经典算法题,每一题都能帮你提升java水平!
JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: ...
- Java在算法题中的输入问题
Java在算法题中的输入问题 在写算法题的时候,经常因为数据的输入问题而导致卡壳,其中最常见的就是数据输入无法结束. 1.给定范围,确定输入几个数据 直接使用普通的Scanner输入数据范围,然后使用 ...
- Java基础算法
i++;++i; i--;--i; int a=5;int b=a++;++放在后面,表示先使用a的值,a再加1b=5,a=a+1,a=6 int c=5;int d=++c;++放在前面,表示先将c ...
- JAVA基础50题
package package0530; import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;imp ...
- java经典算法题50道
原文 JAVA经典算法50题[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序 ...
- java基础算法之冒泡排序
接触冒泡算法还是大一了,学习C语言的冒泡算法.现在唯一记得就是冒泡与选择了.出来刚刚工作的时候觉的算法基本没撒用处,现在发现这些都是很好的基础.因此自己也准备重新拾起这些知识. 冒泡排序 泡排序是一种 ...
- java基础算法-快速排序
玩博客园很多年,第一次写点什么,就从基础开始吧.最近去面试,发现自己算法忘光了,赶紧复习下.以下代码自带测试类,复制进eclipse中右键 run as -->java application ...
- java基础编程题练习(一)
1.编程实现用户输入4个整数,按从大到小的顺序排列输出. 思路:将输入的数据存入数组,使用冒泡排序对数组数据进行排序后输出数组 冒泡排序的代码如下: import java.util.Scanner; ...
随机推荐
- 洛谷-均分纸牌-NOIP2002提高组复赛
题目描述 Description 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸 ...
- 搭建gitbook环境
1.官网下载安装nodejs,安装完成后使用终端输入node -v,用cmd命令窗口查看是否安装成功:如下图所示: 2.在cmd命令窗口中输入:npm install -g cnpm -registr ...
- yii2.0 面包屑的使用
yii2中面包屑是yii2自带的小部件,类似本网站的导航栏应该就是采用面包屑来完成的 例子如下,需要引入 yii\widgets\Breadcrumbs echo Breadcrumbs::widge ...
- 用myeclipse 创建maven项目时,生成的项目名中总是包含Maven Webapp
解决办法:新建Maven项目时,展开Advanced-Name template中选择[artifactId]即可
- mongodb 性能提高之利用索引, 待续
> 10 , 用户无法忍受 >1s , 需要加装中提示 数据库对软件整体影响是不言而喻的, 那么使用 MOngoDB时 该如何提高数据库性能 第一: 索引, 相当于记忆法的 地点桩 1. ...
- log4j.properties 的使用详解
一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失IN ...
- [转]linux权限补充:rwt rwT rws rwS 特殊权限
众所周知,Linux的文件权限如: 777:666等,其实只要在相应的文件上加上UID的权限,就可以用到加权限人的身份去运行这个文件.所以我们只需要将bash复制出来到另一个地方,然后用root加上U ...
- C#委托与事件讲解(一)
首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个意思,除非委托2个中文字不认识,举个例子,小明委托小张去买车票. 但是在我们的程序世界里,也是这么的简单吗?当然,什么是OO ...
- 微信小程序跳转页面
小程序页面有2种跳转,可以在wxml页面或者js中: 1,在wxml页面中: <navigator url="../index/index">跳转到新页面</na ...
- 大数据时代之hadoop(四):hadoop 分布式文件系统(HDFS)
分布式文件系统即是网络中多台计算机组合在一起提供一个统一存储及管理的系统. Hadoop提供了一个文件系统接口和多个分布式文件系统实现,其中比较重要的就是HDFS(Hadoop Distributed ...