Рубрики
Без рубрики

Подсчитайте количество треугольников на Данном рисунке – Программное решение

Один из моих друзей прислал мне изображение ниже в качестве головоломки для подсчета треугольников. Я начал их считать и сначала дошел до 15, потом снова пересчитал и дошел до

Автор оригинала: Pankaj Kumar.

Один из моих друзей прислал мне изображение ниже в качестве головоломки для подсчета треугольников. Я начал их считать и сначала дошел до 15, потом снова пересчитал и дошел до 19.

Но я не был уверен, прав я или нет. Поэтому я подумал о том, чтобы написать простую программу, чтобы узнать общее количество треугольников. Я использовал приведенный ниже алгоритм, чтобы узнать количество треугольников.

  • Любой треугольник имеет три различные точки.
  • Любой треугольник состоит из трех различных линий.

Теперь подсчет строк с точками прост, на изображении ниже мы легко видим, что оно содержит 7 строк.

Ниже приведена программа для определения общего количества треугольников в этих сценариях.

package com.journaldev.utils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

public class FindTriangles {

	public static void main(String[] args) {

		// Scanner scanner = new Scanner(System.in);
		// System.out.println("Please enter number of lines");
		// int count = Integer.parseInt(scanner.nextLine());
		//
		// List lines = new ArrayList();
		// for(int i=0; i lines) {
		int count=0;
		// Find total distinct points using Set
		Set points = new HashSet();
		for (String line : lines) {
			char[] pointArray = line.toCharArray();
			for (char c : pointArray)
				points.add(c + "");
		}
		System.out.println("Points are::" + points.toString());
		
		//Create Array from Set
		String[] pointsArray = new String[points.size()];
		pointsArray = points.toArray(pointsArray);
		System.out.println(Arrays.toString(pointsArray));
		
		//Create distinct points set by looping
		for(int i=0; i< pointsArray.length-2; i++){
			for(int j=i+1; j< pointsArray.length-1; j++){
				for(int k=j+1; k< pointsArray.length; k++){
					// Triangle has 3 distinct points and 3 different lines
					String triangleOption = pointsArray[i]+pointsArray[j]+pointsArray[k];
					//if all 3 points are in single line, its not a triangle
					// also 2 points should be part of a line
					boolean b1 = false;
					boolean b2 = false;
					boolean b3 = false;
					
					for( String line : lines){
						if(line.contains(pointsArray[i]) 
								&& line.contains(pointsArray[j]) 
								&& !line.contains(pointsArray[k])){
							b1=true;
						}
						if(line.contains(pointsArray[i]) 
								&& line.contains(pointsArray[k]) 
								&& !line.contains(pointsArray[j])){
							b2=true;
						}
						if(line.contains(pointsArray[j]) 
								&& line.contains(pointsArray[k]) 
								&& !line.contains(pointsArray[i])){
							b3=true;
						}
					}
					if(b1 && b2 && b3){
						count++;
						System.out.println(triangleOption);
					}
				}
			}
		}
		System.out.println("Total Triangles="+count);
	}

}

Ниже приведен вывод вышеупомянутой программы.

Points are::[D, E, F, G, A, B, C, H, I, J, K]
[D, E, F, G, A, B, C, H, I, J, K]
DEA
DFA
DAC
DCK
EFA
EAC
ECJ
FAC
FCI
GAB
GAH
GAI
GIK
ABH
ABI
ACI
ACJ
ACK
AHI
AIJ
AIK
AJK
BCI
HIJ
Total Triangles=24
Points are::[A, B, C]
[A, B, C]
ABC
Total Triangles=1

Таким образом, общее количество треугольников равно 24, что ж, я многое упустил при их подсчете. Но теперь у меня есть простой способ сделать это, я надеюсь, что это тоже поможет кому-то в решении подобных проблем.