zoukankan      html  css  js  c++  java
  • java基础算法题

    为了提高自己的代码能力和算法能力,我决定每天学习一道算法题,吸收前辈思想。

    【程序1】 TestRabbit.java
        题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    程序分析:兔子数量的规律为数列:1,1,2,3,5,8,13.....其实就是斐波那契数列  使用递归就可以实现

     1 /**
     2  * 兔子问题
     3  * 2016/5/9
     4  * 斐波那契数列求值
     5  *题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
     6  *小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
     7  *程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
     8  */
     9 package org;
    10 
    11 import java.util.Scanner;
    12 public class TestRabbit {
    13 
    14     public static void main(String[] args) {
    15         Scanner input = new Scanner(System.in);
    16         int n = input.nextInt();
    17         int num = fun(n);
    18         System.out.println("第"+n+"个月的兔子总数为:"+num);
    19     }
    20 
    21     public static int fun(int n){
    22         if(n == 1 || n ==2){
    23             return 1;
    24         }else{
    25             return (fun(n-1) + fun(n-2));
    26         }
    27         
    28     }
    29 
    30 }
    TestRabbit.java

    【程序2】DaffodilsNum.java

        题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 
            153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

     1 /**
     2  *  题目:水仙花数
     3  *  打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
     4  *  例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 
     5  *
     6  * 2016/5/10
     7  */
     8 package org;
     9 
    10 public class DaffodilsNum {
    11 
    12     public static void main(String[] args) {
    13         for(int i = 100; i <= 999; i++){
    14             int a = i % 10;        //个位数
    15             int b = (i / 10) % 10;        //十位数
    16             int c = i / 100;            //百位数
    17             int sum = a*a*a +b*b*b + c*c*c;
    18             if(i == sum){
    19                 System.out.println("水仙花数:"+i);
    20             }
    21         }
    22     }
    23 }
    DaffodilsNum.java

    【程序3FenJie.java
        题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

     1 /**
     2  * 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 
     3  * 2016/5/11
     4  */
     5 package org;
     6 
     7 import java.util.Scanner;
     8 
     9 public class FenJie {
    10 
    11     public static void main(String[] args) {
    12          Scanner input = new Scanner(System.in);
    13          int num1 = input.nextInt();
    14          int num = num1;
    15          int k = 2;
    16          //方法一:循环
    17          while(num > k){
    18              if(num % k ==0){
    19                  System.out.print(k + " * ");
    20                  num = num / k;
    21              } else{
    22                  k++;
    23              }
    24          }
    25          System.out.print(k);
    26          System.out.println();
    27         // 方法二:递归
    28          fun(num1);
    29 
    30     }
    31 
    32     public static void fun(int num){
    33         int i ;
    34         if(num == 1 ){
    35             return;
    36         }else{
    37             for(i = 2; i <= num; i++){
    38                 if(num % i ==0){
    39                     System.out.print(i + " * ");
    40                     break;
    41                 }
    42             }
    43             fun(num/i);
    44         }
    45 
    46     }
    47 
    48 }
    FenJie

    【程序4GcdTest.java后者是辗转相除法
        题目:输入两个正整数mn,求其最大公约数和最小公倍数。

     1 /**
     2  * 求其最大公约数和最小公倍数。 
     3  * 2016/5/12
     4  */
     5 
     6 package org;
     7 
     8 public class GcdTest {
     9 
    10     public static void main(String[] args) {
    11         int a = 18;
    12         int b = 124;
    13         int a_x = a;
    14         int b_x = b;
    15         //保证a  > b
    16         if( a < b ){
    17             int num = a;
    18             a = b;
    19             b = num;
    20         }
    21         int num = b;
    22         do{
    23             if (a % b == 0){
    24                 System.out.println("最大公约数为:" + b);
    25                 System.out.println("最小公倍数为"+a_x*b_x/b);
    26                 return;
    27             }else{
    28                 num = a % b; 
    29                 a = b;
    30                 b = num;
    31             }
    32         }while(b != 0);
    33 
    34     }
    35 
    36 }
    View Code

    【程序5 StChar.java
        题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

     1 /**
     2  * 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
     3  * 2016/5/13
     4  */
     5 package org;
     6 
     7 import java.util.Scanner;
     8 public class StrIdentify {
     9 
    10     public static void main(String[] args) {
    11         int letter = 0;
    12         int number = 0;
    13         int blank = 0;
    14         int other = 0;
    15         Scanner input = new Scanner(System.in);
    16         String str = input.nextLine();
    17         char[] ch = str.toCharArray();
    18         for(int i = 0; i < ch.length; i++){
    19         
    20             if (Character.isLetter(ch[i])){        //字母
    21                 letter++;
    22             } else if(Character.isDigit(ch[i])){        //数字
    23                 number++;
    24             }else if(Character.isSpaceChar(ch[i])){        //空格
    25                 blank++;
    26             } else{                            //其他
    27                 other++;
    28             }
    29         }
    30         System.out.println("字母个数为: " + letter);
    31         System.out.println("数字个数为: " + number);
    32         System.out.println("空格个数为: " + blank);
    33         System.out.println("其他字符个数为: " + other);
    34     }
    35 
    36 }
    View Code

    【程序6】 TestAdd.java
        题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

     1 /**
     2  * java 
     3  * 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
     4  * 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
     5  *( 201265
     6  **/ 
     7 package org;
     8 
     9 import java.util.Scanner;
    10 public class TestAdd {
    11     public static void main(String[] args) {
    12         Scanner input = new Scanner(System.in);
    13         System.out.println("请输入两个数,第一个数表示这些相同的数字,第二个数表示共有几个数相加");
    14         System.out.println("请输入数字0-9");
    15         int num_x = input.nextInt();
    16         System.out.println("请输入有多少个数相加");
    17         int n = input.nextInt();
    18         int sum = 0;
    19         for(int i = 0; i < n; i++){
    20             sum += ( num_x * (n-i) * Math.pow(10,i));
    21         }
    22         System.out.println("这些数相加的和为: " + sum);
    23 
    24 
    25     }
    26 
    27 }
    View Code

    【程序7】 WanShu.java
        题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。

     1 /**
     2  * java 完数
     3  * 2016/5/16
     4  **/
     5 package org;
     6 
     7 import java.util.Scanner;
     8 public class WanShu {
     9 
    10     public static void main(String[] args) {
    11         for(int i = 1; i <= 1000; i++){
    12             Wanshu(i);
    13         }
    14     }
    15 
    16     public static void Wanshu(int n){
    17         
    18         int num = 1;
    19         for(int i = 2; i < n; i ++){
    20             if( n % i == 0 ){
    21                 num += i;
    22             }
    23         }
    24         if(num == n){
    25             System.out.println("完数: " + n);
    26 
    27         }
    28 
    29     }
    30 
    31 }
    View Code

    【程序8TestBall.java
        题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

     1 /**
     2  * 2016/5/17
     3  * 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
     4  */
     5 package org;
     6 
     7 public class TestBall {
     8     public static void main(String[] args) {
     9 
    10         double a = 100;
    11         double sum = 100;
    12         for (int i = 2; i <= 10; i++) {
    13             a = a * 0.5;
    14             sum = sum + a * 2;
    15         }
    16         System.out.println("10次共反弹" + sum + "米; 反弹距离:"+ a);
    17     }
    18 }
    View Code

    【程序9 TestTN.java
        题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

     1 /**
     2  * 2016/5/18
     3  *    题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 
     4  */
     5 package org;
     6 
     7 public class TestTN {
     8     public static void main(String [] args){
     9         int a;
    10         int b;
    11         int c;
    12         int num = 0;
    13         for(a = 1; a < 5; a++){
    14             for(b = 1; b < 5; b++){
    15                 for(c = 1; c < 5; c++){
    16                     if(a != b && b != c && a != c){
    17                         num++;
    18                         System.out.println("第" + num + "个数:" + a + b +c);
    19                     }
    20                 }
    21             }
    22         }
    23     }
    24 }
    View Code

    【程序10FindNumber.java
        题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(只在十万以内讨论)

     1 /**
     2  *  2016/5/19
     3  * 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 
     4  */
     5 package org;
     6 
     7 public class FindNumber {
     8     public static void main(String[] args){
     9         for(int i = 1; i <= 100000;  i++){
    10             if(Math.sqrt(i + 100) % 1 == 0 && Math.sqrt(i +168) % 1 == 0){
    11                 System.out.println(i);
    12             }
    13         }
    14     }
    15 }
    View Code

     【程序11题目:输入某年某月某日,判断这一天是这一年的第几天?

     1 /**
     2  * 2016/5/20
     3  * 题目:输入某年某月某日,判断这一天是这一年的第几天?
     4  */
     5 package org;
     6 
     7 import java.util.Scanner;
     8 
     9 public class TestDay {
    10     public static void main(String[] args){
    11         System.out.println("请输入日期:(用空格隔开)");
    12         Scanner input = new Scanner(System.in);
    13         int year = input.nextInt();
    14         int month = input.nextInt();
    15         int day = input.nextInt();
    16         int dayNumber = 0;
    17         if((year % 4 ==0 && year % 100 == 0) || year % 400 == 0){ //闰年
    18             int day_num[] = {31,28,31,30,31,30,31,31,30,31,30,31};
    19             for(int i = 1; i < month; i++){
    20                 dayNumber += day_num[i];
    21             }
    22             dayNumber += day;
    23         }else{
    24             int day_num[] = {31,29,31,30,31,30,31,31,30,31,30,31};
    25             for(int i = 1; i < month; i++){
    26                 dayNumber += day_num[i];
    27             }
    28             dayNumber += day;
    29         }
    30         System.out.println(year + "年" + month +"月" + day + "日是" + year + "的第" + dayNumber +"天~~" );
    31     }
    32 }
    View Code

    【程序12Nine.java
        题目:输出9*9口诀。

     1 /**
     2  * 2016/5/21
     3  *  题目:输出9*9口诀。 
     4  */
     5 package org;
     6 
     7 public class Nine {
     8     public static void main(String[] args) {
     9         for (int i = 0; i < 10; i++) {
    10             for (int j = 0; j <= i; j++) {
    11                 System.out.print(i + "*" + j + "=" +i * j + " " + "	");
    12             }
    13             System.out.println();
    14         }
    15     }
    16 }
    View Code

    【程序13MonkeyEatPeach.java
        题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天      剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

     

     1 /**
     2  * 2016/5/22
     3  * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
     4  * 又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天 
     5  * 剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 
     6  */
     7 package org;
     8 
     9 public class MonkeyEatPeach {
    10     public static void main(String[] args){
    11         int num = 1;
    12         System.out.println("第" + 10 + "天剩余的桃子:" + num);
    13         for (int i = 9; i >= 1; i--){
    14             num = (num + 1) * 2;
    15             System.out.println("第" + i + "天剩余的桃子:" + num);
    16         }
    17         System.out.println(num);
    18     }
    19 
    20 }
    View Code

    【程序14LingXing.java 
        题目:打印出如下图案
        *
        ***
        ******
        ********
         ******
             ***
               *

     1 /**
     2  * 2016/5/23
     3  *   题目:打印出如下图案(菱形) 
     4  *   *
     5  *   ***
     6  *   ******
     7  *   ********
     8  *     ******
     9  *           ***
    10  *              *
    11  */
    12 package org;
    13 
    14 public class LingXing {
    15     public static void main(String[] args){
    16         int[] arr = { 1, 3, 6, 8, 6, 3, 1 };
    17         int[] arr_x = {2,8,11};
    18         for (int i = 0; i < 4; i++) {
    19             for (int j = 0; j < arr[i]; j++) {
    20                 System.out.print("*");
    21             }
    22             System.out.println("");
    23         }
    24         for (int i = 4; i < arr.length; i++) {
    25             for (int j = 0; j < arr_x[i-4]; j++) {
    26                 System.out.print(" ");
    27             }
    28             for (int j = 0; j < arr[i]; j++) {
    29                 System.out.print("*");
    30             }
    31             System.out.println("");
    32         }
    33     }
    34 }
    View Code

     【程序15TestAdd2.java
        题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。

     1 /**
     2  * 2016/5/24
     3  *  题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 
     4  */
     5 package org;
     6 
     7 public class TestAdd2 {
     8     public static void main(String[] args){
     9         double x = 2.0;
    10         double y = 1;
    11         double sum = 2.0;
    12         System.out.print(x + "/" + y + " ");
    13         for(int i = 0; i < 20; i++){
    14             double y_1 = y;
    15             y = x;
    16             x = x + y_1;
    17             sum = sum + x/y;
    18 //            System.out.print(x + "/" + y + " ");
    19         }
    20         System.out.println("
     总和:" + sum);
    21     }
    22     
    23 }
    View Code

     【程序16TestJieCheng.java
        题目:求1+2!+3!+...+20!的和

     1 /**
     2  * 2016/5/25
     3  *   题目:求1+2!+3!+...+20!的和 
     4  *
     5  */
     6 package org;
     7 
     8 public class TestJieCheng {
     9     public static void main(String[] args){
    10         int sum = 0;
    11         int data = 1;
    12         for(int i = 1; i <= 20; i++){
    13             data = data*i;
    14             sum += data;
    15         }
    16         System.out.println(sum);
    17     }
    18 }
    View Code

    【程序17TestAge.java
        题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大      两岁。最后问第一个人,他说是10岁。请问第五个人多大?

     1 /**
     2  * 2016/5/25
     3  * 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
     4  *    问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大
     5  *    两岁。最后问第一个人,他说是10岁。请问第五个人多大? 
     6  */
     7 package org;
     8 
     9 import sun.management.Agent;
    10 
    11 public class TestAge {
    12     public static void main(String[] args){
    13         System.out.println(Age(5));
    14     }
    15     public static int Age(int n){
    16         if(n == 1){
    17             return 10;
    18         }else{
    19             return 2+Age(n - 1);
    20         }
    21     }
    22 
    23 }
    View Code

    【程序18TestNumber.java
        题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

     1 /**
     2  * 2016/5/26
     3  *   题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
     4  */
     5 package org;
     6 
     7 public class TestNumber {
     8     public static void main(String[] args){
     9         int num = (int)(1 + Math.random()*(10000 - 1 +1));
    10         System.out.println(num+ " ");
    11         String num_string = num+"";
    12         System.out.println("位数:" + num_string.length());
    13         char[] num_char = num_string.toCharArray();
    14         for(int i = num_string.length()-1; i >= 0; i--){
    15             System.out.print(num_char[i]);
    16         }
    17     }
    18 }
    View Code

    【程序19】 SuShu.java
        题目:求100之内的素数

     1 /**
     2  * 2016/5/27
     3  * 题目:求100之内的素数
     4  */
     5 package org;
     6 public class SuShu {
     7     public static void main(String[] args){
     8         int a;//标记
     9         System.out.println(2 + " ");
    10         for(int i = 1; i <= 100; i+=2){
    11             a = 1;
    12             for(int j = 2; j < i; j++){
    13                 if(i % j == 0) {
    14                     a = -1;
    15                     break;
    16                 }
    17             }
    18             if(a == 1){
    19                 System.out.println(i + " ");
    20             }
    21         }
    22     }
    23 }
    View Code

     【程序20YangHui.java
        题目:打印出杨辉三角形(要求打印出10行如下图)
             1
            1  1
           1  2  1
          1  3  3  1
         1  4  6  4  1
        1  5  10 10  5  1


  • 相关阅读:
    【工匠大道】svn使用总结
    【工匠大道】将项目同时托管到Github和Git@OSC
    【工匠大道】Git的使用总结
    android中dumpsys命令使用
    loadrunner11使用wplus_init_wsock录制非IE脚本/手机抓包
    互联网协议入门
    jmeter将上一个请求的结果作为下一个请求的参数——使用正则提取器
    使用Fiddler对Android应用进行抓包
    github readme.md添加图片
    python中subprocess.Popen的args和shell参数的使用
  • 原文地址:https://www.cnblogs.com/snail-lb/p/5476147.html
Copyright © 2011-2022 走看看