Определить по введенным данным сколько из отрезков можно собрать треугольников - C (СИ)
Формулировка задачи:
Нужно написать программу ,которая будет определять по введенным данным (данные=длины отрезков),сколько из этих отрезков можно собрать треугольников .Вся сложность состоит в том,что отрезков можем ввести от 3 до 10000(я так понимаю надо список list) и как потом сделать ,чтобы программа прогоняла все отрезки между собой(вот тут я думаю for подойдет).Будьте добры напишите программу,хотя бы в краткой форме
Решение задачи: «Определить по введенным данным сколько из отрезков можно собрать треугольников»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define MAX_BEAM 10000
#define null -1
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int Sort(int a[MAX_BEAM], int n) {
qsort(a, n, sizeof *a, cmp ); // СОРТИРУЕМ
return a[n];
}
int main(int argc, char * argv []) {
int arrSize = 0;
int lengthBeam[MAX_BEAM] = {null};
int inputScan = 0;
int i;
int ntr=0;
printf("Dliny otr: \n");
while(arrSize<= MAX_BEAM) {
inputScan = scanf("%d", &lengthBeam[arrSize]);
if (!inputScan) {
printf("Error.\n");//ИСПРАВИТЬСЯ НА НЕПРАВИЛЬНЫЙ ВВОД
return 0;
}// if was string on input
if ( feof(stdin) ) {
break;
}// if was on input "end of line"
if (lengthBeam[arrSize] <= 0) {
printf("Error.\n");//ИСПРАВИТЬСЯ НА НЕПРАВИЛЬНЫЙ ВВОД
return 0;
}
arrSize++;
}
if (arrSize < 3 ) {
printf("Error.\n");//ИСПРАВИТЬСЯ НА НЕПРАВИЛЬНЫЙ ВВОД
return 0;
}// if was values less than 3
else {
Sort(lengthBeam, arrSize);//СОРИРУЕМ
int length_i=-1;
for (i = 0; i<=arrSize-2; ++i) {
int length_j=-1;
int j;
if (lengthBeam[i] == length_i)
continue;
length_i=lengthBeam[i];
int length_k=-1;
int k;
for (j =i+1; j<=arrSize-1; ++j) {
if ((lengthBeam[j] == length_j))
continue;
length_j = lengthBeam[j];
for (k= j+1; k<=arrSize; ++k) {
if ((lengthBeam[k]= length_k))
continue;
length_k = lengthBeam[k];
if ((lengthBeam[i] + lengthBeam[j])>lengthBeam[k] && (lengthBeam[i] + lengthBeam[k])>lengthBeam[j] && (lengthBeam[k] + lengthBeam[j])>lengthBeam[i]) {
++ntr;
}
}
}
}
}
printf("Trejuholniki: %d\n", ntr);//ПИШЕМ КОЛИЧЕСТВО ТРЕУГОЛЬНИКОВ
system("pause");
return 0;
}