当前位置:网站首页>Manhattan distance sum - print diamond

Manhattan distance sum - print diamond

2022-07-06 06:08:00 starnight531

 Manhattan distance and map

Food Guide :

Leetcode The column opens , Because the blogger is closed at the end of the period , So only one question per day
Try to solve more than one problem , First say the train of thought. , Then the code realizes , Necessary comments will be added
Grammar or STL The content will be highlighted at the attention point , Novice friendly
Welcome to the blogger's magic tricks column , Detailed explanation of connotation algorithm foundation and code template

Title Description :

  • Enter an odd number n, Output a by * Composed of n Step solid diamond .

    Input format
    An odd number n.

    Output format
    Output a by * Composed of n Step solid diamond .

    Refer to the output sample for specific format .

    Data range
    1≤n≤99
    sample input :
    5
    sample output :
     The diamond

  • Title source :https://www.acwing.com/problem/content/729/

Topic analysis :

Law 1 : Manhattan distance and :

  • Manhattan distance :x / y The maximum value of the direction projection distance

  • Manhattan distance and :x Direction projection distance + y Direction projection distance

  • The diamond :

    The nature of the circle itself is that the distance from each point to the center of the circle is equal , This distance is under the root sign ((Δx)2+(Δy)2)

    In the array , Because of the accuracy , Reduce the distance to Manhattan distance and
    The same Manhattan distance and the collection of points form a diamond , The diamond is already very close
    But because of its different mathematical expressions , The resulting figure is also a diamond

Algorithm template :

Code implementation :

Law 1 :

  • Enter only odd numbers :
import java.util.Scanner;
import java.lang.Math;
public class Main{
    
    public static void main(String[] args){
    
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i=0; i<n; i++){
    
            for(int j=0; j<n; j++){
    
                if (Math.abs(i - n/2)+Math.abs(j - n/2) <= n/2){
    
                    System.out.print("*");
                }else System.out.print(" ");
            }
            System.out.println();
        }
    }
}
  • Odd even mixed input :
import java.util.Scanner;
import java.lang.Math;
public class Main{
    
    public static void main(String[] args){
    
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = n;
        if (n % 2 == 0) m++;
        for(int i=0; i<m; i++){
    
            for(int j=0; j<m; j++){
     
                if (Math.abs(i - m/2)+Math.abs(j - m/2) <= m/2){
    
                        System.out.print("*");
                    }else System.out.print(" ");  
                
            }
            System.out.println();
        }
    }
}

Be careful :

  • For odd row diamonds :

    Input n It is the number of rows and columns in a diamond , It's diamond in the middle again * Number

    The number of lines of the square on the outside of the diamond / The number of columns is odd , Midpoint is (n/2 , n/2),mahattan = max(abs(i - n/2), abs(j - n/2))

  • For even rows of diamonds :

    Input n For the even , The number of diamond rows and columns is n+1, Middle row * The number is also n+1

    The number of lines of the square on the outside of the diamond / The number of columns is odd , Midpoint is ((n+1/2), (n+1)/2),mahattan = max(abs(i - (n+1)/2), abs(j - (n+1)/2))

  • Can we force the use of even Manhattan distance formula to solve ?

    The answer is that this question cannot , After all, drawing a diamond can only have odd rows and odd sequences (2*n + 1),
    The midpoint compulsorily solved by the even Manhattan distance formula is not the midpoint , Distance is even more wrong .

  • demonstration : Enter the following code 4 The diamond drawn is

import java.util.Scanner;
import java.lang.Math;
public class Main{
    
    public static void main(String[] args){
    
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = n;
        if (n % 2 == 0) m++;
        for(int i=0; i<m; i++){
    
            for(int j=0; j<m; j++){
    
                // Even numbers are wrong to use Manhattan distance formula , The midpoint position and distance are wrong 
                if(n % 2 == 1){
    
                    if (Math.abs(i - n/2)+Math.abs(j - n/2) <= n/2){
    
                        System.out.print("*");
                    }else System.out.print(" ");    
                }else{
    
                    if ((int)Math.abs(i - (n-1)/2.0)+(int)Math.abs(j - (n-1)/2.0) <= n/2){
    
                        System.out.print("*");
                    }else System.out.print(" ");    
                }
            }
            System.out.println();
        }
    }
}

4 Diamond of

原网站

版权声明
本文为[starnight531]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060600431278.html