Algorithm summary (I)

1、 Solving steps

1. Problem analysis

The information analysis given in the title and the description of the review problem

2. Mathematical model establishment

Select a quick and correct model

3. Algorithm design and selection

The algorithm design should be combined with the design of data structure

4. Algorithmic representation

For example: flow chart, box chart, pad chart, pseudo code, etc

5. Algorithm analysis

Time complexity and space complexity

6. Algorithm implementation

7. Program testing and debugging

2、 Algorithm and its elements and characteristics

1. 3 elements of the algorithm

The algorithm consists of operation, control structure and data structure

Arithmetic operations: addition, subtraction, multiplication and division

Relationship comparison: greater than, less than or equal to, not equal to

Logical operations: and, or, not

Data transmission: input, output and calculation

Sequential structure

Select structure

Cyclic structure

2. Basic properties of algorithm

3. Basic characteristics of the algorithm

4. Quality index

5. Design method

3、 Implementation of several program algorithms

(1) Maximum common divisor

Algorithm description (c#)

main()
{
  int a,b,t,i;
  input(a,b);
  t=1;
  for(i=2;i<=a and i<=b;i=i+1)
    while (a mod i =0 and b mod i =0)
    {
      t=t*i;
      a=a/i;
      b=b/i;
    }
    print(a,"最大公约数是:",t);
}

Optimization of the algorithm (Java) -- Rolling Division

import java.util.Scanner;
//最大公约数
public class GreatestMath {
	public static void main(String[] args) {
		System.out.println("请输入两个整数:");
		Scanner sc =new Scanner(system.in);
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = num1%num2;
		while(num3!=0) {
			num1 = num2;
			num2 = num3;
			num3 = num1%num2;
		}
		System.out.println("最大公约数为:"+num2);
	}
}

(2) Least common multiple

Algorithm implementation (Java) -- minimum common multiple = product of two integers ÷ maximum common divisor

//最小公倍数
import java.util.Scanner;
public class GreatestMathDemo {
	public static void main(String[] args) {
		System.out.println("请输入两个整数:");
		Scanner sc = new Scanner(system.in);
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		int temp;
		if(num1<num2) {
			temp = num1;
			num1 = num2;
			num2 = temp;
		}
		int num3 = num1%num2;
		int min = (num1*num2)/num3;	
		if(num3 ==0) {
			System.out.println("最小公倍数是:"+num1);
		}else {
		System.out.println("最小公倍数是:"+min);	
		
		}	
	}
}

(3) Output of one matrix (no keyboard input)

//矩阵输出
public class Array01 {
	public static void main(String[] args) {
		int[] arr ={1,2,3,4,5,6};
		for(int i=1;i<=6;i++) {	
			for(int j=1;j<=arr.length;j++) {
				int t = (j-i)<0?j-i+6:j-i;
				System.out.print(arr[t]+" ");
		}			
			System.out.println();
		}
	}
}

(4) Find the sum of 2 + 22 + 222 + 2222 +... + 22... 22

Situation 1: the program can be said to have a little problem

import java.util.Scanner;
public class FactorialSum01 {
	public static void main(String[] args) {
		int m=0;
		long sum =0;
		Scanner sc =new Scanner(system.in);
		System.out.println("请输入您要计算这个项式的位数:");
		int n = sc.nextInt();
		for(int i=0;i<n;i++) {
			m=(m*10)+2;
			sum+=m;
		}
		System.out.println("(2+22+222+……+22……22)这个项式的和为:"+sum);
	}
}

Case 2: using the pow method in math class

import java.util.Scanner;
public class FactorislSun02 {
	public static void main(String[] args) {
		int sum=0;
		Scanner sc = new Scanner(system.in);
		System.out.println("请输入您要计算这个项式的位数:");
		int num = sc.nextInt();
		for(int i =1;i<=num;i++) {
			sum+=((int)Math.pow(10,i)-1)/9*2;
		}
		System.out.println("(2+22+222+……+22……22)这个项式的和为:"+sum);
	}
}

(5) Recursive algorithm

n factorial

import java.util.Scanner;
public class Factrorisl_N {
	public static void main(String[] args) {
		Scanner sc = new Scanner(system.in);
		System.out.print("请输入您想要求阶乘的数:");
		int num = sc.nextInt();
		int sum = method(num);
		System.out.println(num+"的阶乘是:"+sum);
		
	}
	public static int method(int num) {
		if(num ==0 || num ==1) {
			return 1;
		}else {
			return num*method(num-1);
		}
	}
}

Hanoi Tower problem

Code implementation - Java

import java.util.Scanner;
public class Hanoi {
   //使用递归法求解含有n个不同大小盘子的汉诺塔移动路径,参数n为盘子数,把A塔上盘子全部移动到C塔上,B为过渡塔
    public static void recursionHanoi(int n,char A,char B,char C){
        if(n == 1){
            System.out.print(A+"——>"+C+"\n");
        }
        else{
            recursionHanoi(n-1,A,C,B);  
           //使用递归先把A塔最上面的n-1个盘子移动到B塔上,C为过渡塔
            System.out.print(A+"——>"+C+"\n");    
          //把A塔中底下最大的圆盘,移动到C塔上
            recursionHanoi(n-1,C);      
          //使用递归把B塔上n-1个盘子移动到C塔上,A为过渡塔
        }
    }

   public static void main(String[] args){
        System.out.println("请输入盘子总数n:");
        Scanner in = new Scanner(system.in);
        int n = in.nextInt();
        recursionHanoi(n,'A','B','C');
    }
}

Fibonacci sequence

Code implementation - Java

import java.util.Scanner;
public class Fibonacci_Seqence {
	public static long finbonacci(long number) {
		if(number == 1||number ==0){
			return number;
		}else {
			return finbonacci(number-1)+finbonacci(number-2);
		}
	}
	
	public static void main(String[] args) {
		Scanner sc =new Scanner(system.in);
		System.out.println("请输入您要打印输出的几项:");
		int n = sc.nextInt();
		for(int i=0;i<=n;i++) {
			System.out.println("第"+i+"项是:"+finbonacci(i)+" ");
		}
	}
	
}

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>