zoukankan      html  css  js  c++  java
  • Java算法(一)

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

    1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....

    具体分析如下:

    分析:从第一个兔子开始,第1个月1只兔子,由于“长到第三个月后每个月又生一只兔子”,所以第2个月也是1只兔子,第3个月时可以生一只兔子,所以总数为2只,这时,其中有一只是以后每个月都可以生一只兔子的老兔子,另一只是一只新兔子,它只有在第三个月的时候才可以每个月生一只兔子;这样的话,第4个月的兔子总数为3只,…以此类推。

    很容易可以看出小兔子的数量符合菲波那切数列;

    解法一:

        int sum;//每月的兔子总数
            int a = 1;//第一个月的兔子数
            int b = 1;//第二个月的兔子数
            for (int i = 3; i <= 12; i++) {
                sum = b + a;
                b = a;
                a = sum;
          System.out.println("第" + i + "个月的兔子总是为:" + sum);
            }

    解法二:
    //递归方法实现
    public class A01 {
    public static void main(String args[]) {
    for (int i = 1; i <= 20; i++)
    System.out.println(F(i));
    } public static int F(int month){ if(month == 1 || month == 2){ return 1; }else return F(month-1)+F(month-2); }
    【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。
    1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。


    public class A02 {

    
    

    public static void main(String[] args) {
    for(int i=100;i<201;i++) {
    boolean flag = true;
    for(int j=2;j<i;j++) {
    if(i%j==0) {
    flag = false;
    break;
    }
    }
    if(!flag) {
    continue;
    }
    System.out.println(i+"是素数");
    }
    }
    }

    【程序3】 题目:打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,
    其各位数字立方和等于该数本身。例如:153是一个 水仙花数 ,因为153=1的三次方+5的三次方+3的三次方。
    程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。


    public class A03 {

    
    

    public static void main(String[] args) {
    System.out.println("100到1000中秋水仙数为:");
    for(int i=100;i<1000;i++) {
    int b = i/100;
    int s = (i%100)/10;
    int g = i%10;
    if(i==b*b*b+s*s*s+g*g*g) {

    System.out.println(i);
    }
    }
    }

    【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 
    程序分析:对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成:
    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
    (2)如果n > i,但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数你,重复执行第一步。
    (3)如果n不能被i整除,则用i+1作为i的值,重复执行第一步


    import java.util.Scanner;
    public class A04 {

    public void fenjie(int n) {

    for (int i = 2; i <= n; i++) {

    if (n % i == 0) {
    System.out.print(i);
    if(n!=i){
    System.out.print("*");
    }
    fenjie(n/i);
    }
    } System.exit(0);

    }

    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("请输入N的值:");
    int N = in.nextInt();
    System.out.print( "分解质因数:" + N +"=");
    new A04().fenjie(N);
    }
    }

    【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。


    import java.util.Scanner;

    public class A05 {

    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("请输入成绩:");
    int num = in.nextInt();
    /*第一种

    if(num>=90) {
    System.out.println("A");
    }
    else if(num>=60&&num<=89) {
    System.out.println("B");
    }
    else if(num>=0&&num<=59) {
    System.out.println("C");
    }
    else {
    System.out.println("输入错误");
    }*/

    //第二种
    System.out.println( (num>=90)?"A":((num>59)?"B":"C"));
    }
    }

    【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

    import java.util.Scanner;
    public class A06 {
    public static void main(String[] args){
    int a,b,m,n;
    Scanner in=new Scanner(System.in);
    System.out.println("请输入一个正整数:");
    a=in.nextInt();
    System.out.println("再输入一个正整数:");
    b=in.nextInt();
    A use=new A();
    m=use.commonDivisor(a,b);
    n=a*b/m;
    System.out.println("最大公约数:"+m);
    System.out.println("最小公倍数:"+n);
    }
    }
    class A{
    public int commonDivisor(int x,int y){
    if(x<y){
    int t=x;
    x=y;
    y=t;
    }
    while(y!=0){
    if(x==y)return x;
    else{
    int k=x%y;
    x=y;
    y=k;
    }
    }
    return x;
    }
    }

    【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
    1.程序分析:利用for循环语句,if条件语句。

    import java.util.Scanner;

    
    

    public class A07 {
    public static void main(String[] args){
    System.out.println("请输入一个字符串;");
    Scanner in=new Scanner(System.in);
    String str=in.nextLine();
    char[] ch=str.toCharArray();
    count s=new count();
    s.count(ch);
    }
    }
    class count{
    int SHUZI,ZIMU,KONGGE,QITA;
    public void count(char[] arr){
    for(int i=0;i<arr.length;i++){
    if(arr[i]>='0'&&arr[i]<='9'){
    SHUZI++;
    }else if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z')){
    ZIMU++;
    }else if(arr[i]==' '){
    KONGGE++;
    }else{
    QITA++;
    }
    }
    System.out.println("数字个数:"+SHUZI);
    System.out.println("英文字母个数:"+ZIMU);
    System.out.println("空格个数:"+KONGGE);
    System.out.println("其他字符个数:"+QITA);
    }
    }


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

    import java.util.Scanner;
    public class A08 {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("请输入a的值:");
    int a = in.nextInt();
    System.out.println("请输入n个数:");
    int n = in.nextInt();
    int s = 0,t=0;
    for (int i = 1; i <= n; i++) {
    t += a;
    a = a*10;
    s += t;
    }
    System.out.println(s);
    }
    }





  • 相关阅读:
    C++程序设计入门--前言
    C++ string_view 的坑
    从OGRE,GAMEPLAY3D,COCOS2D-X看开源
    抽烟解闷的程序员
    一个团队应该是什么样
    准备开始接手公司的项目
    两位印象深刻的同事
    一段故事结束,一段生活开始
    starling性能优化总结(毫无疑问还是转载)
    知道端口号如何查看应用位置
  • 原文地址:https://www.cnblogs.com/Tom-shushu/p/9026997.html
Copyright © 2011-2022 走看看