java基础算法(1):顺序、分支、循环、嵌套循环怎么应用?

论坛 期权论坛 脚本     
匿名技术用户   2021-1-2 20:53   221   0

一、顺序算法

public static void main(String args[]){
 //钱>50万
 int money=30;
 if(money>50){
  System.out.println("买宝马");
 }
 System.out.println("上班");
}

if语句注意点分析:

if--else语句

import java.util.Scanner;//包的导入
//import java.lang.*;默认导入包

Scanner in=new Scanner(System.in);
 System.out.print("请输入成绩:");
 int score=in.nextInt();
 String d=in.next();
 if(score<=60){
  System.out.println("下次上课买好吃的");
 }else{
  System.out.println("你很棒!");
 }

注意点:控制台输入,需导入一个相关的包

import java.util.Scanner;//包的导入
//import java.lang.*;默认导入包

Scanner in=new Scanner(System.in);
System.out.print("请输入成绩:");
int score=in.nextInt();

for语句、while语句关系

for语句是while语句的简化,把初始化、条件比较、迭代语句规划在一个括号里面

有下面几种情况,一般用while语句不用for语句

(1)条件表达式复杂:用while提高可读性;

(2)循环次数不明确用while。

算法题目

1.控制台输入三个整数a、b、c比较大小并按从小到大的顺序输出。

package javalearn.qwe;
import java.util.Scanner;
public class Learn {
public static void main(String args[]){
 Scanner in=new Scanner(System.in);
 System.out.println("请输入第一个数:");
 int a=in.nextInt();
 System.out.println("请输入第二个数:");
 int b=in.nextInt();
 System.out.println("请输入第三个数:");
 int c=in.nextInt();
 int temp=0;
 if(a>b){
  temp=a;
  a=b;
  b=temp;
 }
 if(a>c){
  temp=a;
  a=c;
  c=temp;
 }
 if(b>c){
  temp=b;
  b=c;
  c=temp;
 }
 System.out.println("从小到大顺序输出:"+a+"<"+b+"<"+c);
}
}

2.控制台输入一个三位数判断是否是水仙花数(num=百位数字三次方+十位数字三次方+个位数字三次方)。

import java.util.Scanner;
public class PanShu {
public static void main(String args[]){
 Scanner in=new Scanner(System.in);
 System.out.println("请输入三位整数:");
 int sum=in.nextInt();
 int one, two, three,temp;
 one=sum/100;//百位数
 two=(sum/10)%10;//十位数
 three=(sum%100)%10;//个位数
 temp=one*one*one+two*two*two+three*three*three;
 if(sum==temp){
  System.out.println(sum+"是水仙花数!");
 }else{
  System.out.println(sum+"不是水仙花数!");
 }
}
}
public class ShuiXianHua {
/**
 * 水仙花数分两步:1.水仙花数判断条件;2.循环内的水仙花数以及统计个数
 * 1.水仙花数的判断:
 * (1)获取三位数的个个位数上面的具体数字
 *     百位数:num/100   十位数:num%100/10或(num/10)%10    个位数:num%10或num%100%10
 * (2)水仙花数等于每位上的数字三次方再相加,判断是否与原数相等
 * 2.统计个数:
 *   在判断语句中加迭代语句
 * @param args
 */
 public static void main(String args[]){
  int one,two,three;
  int sum=0,i=0;
  for(int num=100;num<1000;num++){
   one=num/100;
   two=(num/10)%10;
   three=num%10;
   sum=one*one*one+two*two*two+three*three*three;
   if(sum==num){
    i++;
    System.out.println("输出水仙花数:"+num);
   }
  }
  System.out.println("统计100--1000的水仙花数共计:"+i+"个");
 }
}

3.控制台输入一个整数判断是否被3、5、7整除。

import java.util.Scanner;
public class TestDemo {
public static void main(String args[]){
 Scanner in=new Scanner(System.in);
 System.out.println("请输入整数:");
 int number=in.nextInt();
 if(number%3==0&&number%5==0&&number%7==0){
  System.out.println(number+"可以被3、5、7整除");
 }else{
  System.err.println(number+"不能被3、5、7整除");
 }

4.控制台输入一个上限数进行累加用do-while、while、for语句分别进行运算。

(1)do-while语句

import java.util.Scanner;
public class TestDemo {
public static void main(String args[]){
 Scanner in=new Scanner(System.in);
 System.out.println("请输入整数:");
 int number=in.nextInt();
int sum=0,i=0;
 do{
  sum+=i;
  i++;
 }while(i<number);
 System.out.println("累加结果:"+sum);
}
}

(2)for语句

import java.util.Scanner;
public class TestDemo {
public static void main(String args[]){
 Scanner in=new Scanner(System.in);
 System.out.println("请输入整数:");
 int number=in.nextInt();
         int sum=0;
 for(int i=0;i<=number;i++){
  sum+=i;
 }
 System.out.println("累加结果:"+sum);
}
}

(3)while语句

import java.util.Scanner;
public class TestDemo {
public static void main(String args[]){
 Scanner in=new Scanner(System.in);
 System.out.println("请输入整数:");
 int number=in.nextInt();
        int sum=0,i=0;
        while(i<number){
  sum+=i;
  i++;
 }

5.控制台输入两个数判断它们的最大公约数与最小公倍数。

(1)一个程序运用辗转相除法求最大公约数以及最小公倍数=num1*num2/最大公约数。

import java.util.Scanner;
public class MaxMin {
 public static void main(String args[]){
  /**
   * 最大公约数:辗转相除法;
   * 即:num1、num2,num1%num2求余,为0,则num2为最大公约数
   * 否则:把num2给num1,把余数给num2继续求余,直到余数为0,输出num2为最大公约数
   * 最小公倍数:minnum=num1*num2/maxnum;
   */
  Scanner in=new Scanner(System.in);
  System.out.println("请输入第一个整数:");
  int num1=in.nextInt();
  int temp1=num1;
  System.out.println("请输入第二个整数:");
  int num2=in.nextInt(); 
  int temp2=num2;
  int i=num1%num2;
  if(i==0){
   System.out.println(num2+"是两数最大公约数!"); 
   System.out.println(num1+"是两数最小公倍数!");
  }else{
   do{
    num1=num2;
    num2=i; 
    i=num1%num2;
   }while(i!=0);
   System.out.println(num2+"是两数最大公约数!"); 
   int sum=(temp1*temp2)/num2;
   System.out.println(sum+"是两数最小公倍数!"); 
  }  
 }
}

(2)分开用传统的方法求最大公约数

import java.util.Scanner;
public class MaxShu {

 public static void main(String args[]){
  /**
   * 最大公约数:传统算法
   * 1.输入两个整数;
   * 2.运用三目运算找出两数中最小的那个数;
   * 3.最大公约数最大为最小的那个数;
   * 4.从最小的数往前找,第一个能被两数 整除的数即为最大公约数。
   */
  Scanner in=new Scanner(System.in);
  System.out.println("请输入两个数:");
  int num1=in.nextInt();
  int num2=in.nextInt();
  int min=num1<num2?num1:num2;
  for(int i=min;i>=1;i--){
   if(num1%i==0&&num2%i==0){
    System.out.println(i+"是"+num1+"、"+num2+"的最大公约数!");break;
   }
  }
 }
}

(3)传统方法求最小公倍数

import java.util.Scanner;
public class MinShu {

 public static void main(String args[]){
  /**
   * 最小公倍数:传统算法
   * 1.找到两个数中最大的,从最大的数往后循环找能整除两个数的数,故此该数为他俩的倍数;
   * 2.找到的第一个数为最小公倍数,跳出循环
   */
  Scanner in=new Scanner(System.in);
  System.out.println("请输入第一个数:");
  int num1=in.nextInt();
  System.out.println("请输入第二个数:");
  int num2=in.nextInt();
  int i=num1>num2?num1:num2;
  for(int j=i;j<num1*num2;j++){
   if(j%num1==0&&j%num2==0){
    System.out.println(j+"是num1,num2的最小公倍数!");break;
   }
  }
 }
}

6.控制台输入一个数判断该数是否为质数。

import java.util.Scanner;
public class Primer {
/**
 * 判断是否为质数
 * 1.只能被1和自身整除的数,为质数/素数
 * 2.循环:大于2小于自身(2<=i<num)
 * 3.条件语句有两种:
 * (1)num%i==0&&num==i;
 * (2)num%i!=0(2<=i<num)
 * @param args
 */
 public static void main(String args[]){
  Scanner in=new Scanner(System.in);
  System.out.println("请输入一个整数:");
  int num=in.nextInt();
  for(int i=2;i<=num;i++){
   if(num%i==0&&num==i){
    System.out.println(num+"是一个质数!");
     
   }else if(num%i==0&&num!=i){
    System.out.println(num+"不是一个质数!");
    break;
     
   }
  }
   
 }
}

7.兔子繁殖问题

import java.util.Scanner;
public class TuZi {
public static void main(String args[]){
 /**
  * 兔子问题相当于分波契数列:1、1、2、3、5、8、13、21.....
  * 前两个数之后,每一个数均是前两个数之和
  */
 Scanner in=new Scanner(System.in);
 System.out.println("请输入月份:");
 int month=in.nextInt();
 int temp1=1;
 int temp2=1;
 int num=0;
 for(int i=1;i<=month;i++){
  if (i<=2){
   num=1;
  }else{
   num=temp1+temp2;
   temp1=temp2;
   temp2=num;
  }
  System.out.print(num+"  ");
 }
 System.out.println();
 System.out.println("兔子当月总数:"+num);
}
}

8.百钱买百鸡问题:公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

package javalearn5.three;
/**
 * 百钱买百鸡问题
 * 叙述:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
 * 分析:
 *     1.全部买公鸡:最多20只;
 *     2.全部买母鸡:最多33只;
 *     3.买小鸡:上限100只鸡,小鸡最多100只。
 *     4.条件语句:公鸡+母鸡+小鸡=100只鸡;公鸡*5+母鸡*3+小鸡/3=100钱
 * @author Dick
 *
 */
public class Chicken {
public static void main(String args[]){
 for(int x=0;x<20;x++){
  for(int y=0;y<33;y++){
   for(int z=0;z<100;z++){
    if(x+y+z==100&&5*x+3*y+z/3==100){
     System.out.println("公鸡有:"+x+"、母鸡有:"+y+"、小鸡有:"+z);
    }
   }
  }
 }
}
}

9. 9X9乘法口诀打印输出。

public static void main(String args[]){
  /**
   * 9X9乘法口诀
   *  1X1=1  
      1X2=2  2X2=4  
      1X3=3  2X3=6  3X3=9  
   1X4=4  2X4=8  3X4=12  4X4=16  
   1X5=5  2X5=10  3X5=15  4X5=20  5X5=25  
   1X6=6  2X6=12  3X6=18  4X6=24  5X6=30  6X6=36  
   1X7=7  2X7=14  3X7=21  4X7=28  5X7=35  6X7=42  7X7=49  
   1X8=8  2X8=16  3X8=24  4X8=32  5X8=40  6X8=48  7X8=56  8X8=64  
   1X9=9  2X9=18  3X9=27  4X9=36  5X9=45  6X9=54  7X9=63  8X9=72  9X9=81 
   观察行:每行表达式个数和行数相等
   观察列:每列表达式个数递减
   总结:嵌套循环 
   
  for(int i=1;i<10;i++){
   for(int j=1;j<=i;j++){
    int sum=i*j;
    System.out.print(j+"X"+i+"="+sum+"  ");
    if(i==j){
     System.out.println();
    }
   }
  }

10.打印菱形图案用星号。

import java.util.Scanner;
public class ChengFaBiao {

 public static void main(String args[]){
/**
   * 打印菱形
   * 分析:
   *       *
        ***
       *****
      *******
     *********
    ***********
     *********
      *******
       *****
        ***
         *
   *1.考虑空格、星号与行数之间的关系;
   *2.前六行:(以第六行为基准)
   *(1)星号:1、3、5、7、9、11依次递增;2*row-1
   *(2)空格:10、8、6、4、2、0依次递减;第六行星号数-row
   *3.后五行:(以第一行为基准)
   *(1)星号:9、7、5、3、1依次递减;2*(输入行数(6)-1)-1
   *(2)空格:0、2、4、6、8依次递增;
   */
  Scanner in=new Scanner(System.in);
  System.out.println("请输入整数:");
  int n=in.nextInt();
  for(int row1=1;row1<=n;row1++){
   for(int konge=n-row1;konge>0;konge--){
    System.out.print(" ");
   }
   for(int i=1;i<=2*row1-1;i++){
    System.out.print("*");
   }
   System.out.println();
  }
  for(int row2=n-1;row2>0;row2--){
   for(int k=row2-1;k<n-1;k++){
    System.out.print(" ");
   }
   for(int i=1;i<=2*row2-1;i++){
    System.out.print("*");
   }
   System.out.println();
  }
 }
}

11.自动取款机支付密码设置

import java.util.Scanner;
public class Pwd {

 public static void main(String args[]){
  Scanner in= new Scanner(System.in);
  int pwd;
  int num=1;
  do{
   System.out.println("请输入您的密码:");
    pwd=in.nextInt();
    System.out.println("请再次输入您的密码:");
    pwd=in.nextInt();
    num++;
    if(num>3){
     System.out.println("次数已达上限!");
     break;
    }
  }while(pwd!=123456);
  System.out.println("请选择业务,祝您愉快!");
 }
}

12.控制台输入一个年月日判断是该年的第几天。

import java.util.Scanner;
public class Date {
 public static void main(String args[]){
  Scanner in=new Scanner(System.in);
  System.out.println("请输入年份:");
  int year=in.nextInt();
  System.out.println("请输入月份:");
  int month=in.nextInt();
  System.out.println("请输入日期:");
  int day=in.nextInt();
  System.out.println("输入日期为:"+year+"年"+month+"月"+day+"日");
  switch(month-1){
   
  case 11:day+=30;
  case 10:day+=31;
  case 9:day+=30;
  case 8:day+=31;
  case 7:day+=31;
  case 6:day+=30;
  case 5:day+=31;
  case 4:day+=30;
  case 3:day+=31;
  case 2:day+=28;
  case 1:day+=31;break;
   default :
    System.out.println("您输入的数据有误!请核实后,再次输入!");break;
  //case 12:day+=31;
  }
  if((year%4==0&&year%100!=0)||year%400==0){
   day+=1;
   System.out.println(year+"是瑞年!");
   System.out.println("您输入的是"+year+"中的第"+day+"天!");
  }else{
   System.out.println(year+"是平年!");
   System.out.println("您输入的是"+year+"中的第"+day+"天!");
  }
     
  }
   
 }

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP