Автор оригинала: 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, что ж, я многое упустил при их подсчете. Но теперь у меня есть простой способ сделать это, я надеюсь, что это тоже поможет кому-то в решении подобных проблем.