Определить по введенным данным сколько из отрезков можно собрать треугольников - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.571 из 5
Похожие ответы