Определить по введенным данным сколько из отрезков можно собрать треугольников - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д