Заколдованный принц: даны длины сторон, построить треугольник с наибольшим периметром - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Принц нашел 4 волшебных палочки длины которых a, b, c, d. Ему требуется построить треугольник с наибольшим периметром. Задача: определть из каких палочек(т.е. какой длины) принц должен построить треугольник Ввод данных с клавиатуры вводятся 4 положительных числа через пробел a, b, c ,d которые обозначают длины палочек Вывод на экран длин палочек из которых можно постройть треугольник с максимальным периметром в алфавитном порядке перечисления их длин через пробел. Если треугольник нельзя построить то вывести сообщение "NO"

Решение задачи: «Заколдованный принц: даны длины сторон, построить треугольник с наибольшим периметром»

textual
Листинг программы
#include<stdio.h>
 
struct STICK
{   int length;
    char name;
}s[4];
 
struct TRIANGLE
{   STICK side[3];
    int perimeter;
}tr[4];
 
void create(STICK x, STICK y, STICK z, int num)
{   int i;
    tr[num].side[0]=x;
    tr[num].side[1]=y;
    tr[num].side[2]=z;
    tr[num].perimeter = 0;
    if((x.length+y.length)>z.length && (y.length+z.length)>x.length && (x.length+z.length)>y.length)
        tr[num].perimeter=x.length+y.length+z.length;
    printf("\n\nTriangle %d",num);
    for(i=0;i<3;i++)
        printf("\nstick %c, length %d", tr[num].side[i].name, tr[num].side[i].length);
    printf("\nperimeter %d",tr[num].perimeter);
    
}
 
int main()
{   int i,cur,max;
    char j;
 
    for(i=0,j ='a'; i<4; i++,j++)
    {   printf("%c = ",j);
        scanf("%d",&cur);
        s[i].length = cur;
        s[i].name = j;
    }
 
    printf("\nPossible triangles:");
    create(s[0],s[1],s[2],0);
    create(s[0],s[2],s[3],1);
    create(s[1],s[2],s[3],2);
    create(s[0],s[1],s[3],3);
 
    for(i=0, max=0; i<4; i++)
        if(tr[i].perimeter>max)
        {   max = tr[i].perimeter;
            cur = i;
        }
 
    if(!max)
        printf("\n\nNo triangles");
    else
    {   printf("\n\nTriangle created by:");
        for(i=0;i<3;i++)
            printf("\nstick %c, length %d", tr[cur].side[i].name, tr[cur].side[i].length);
        printf("\nhas maximum perimeter %d",tr[cur].perimeter);
    }
 
    flushall();
    getchar();
    return 0;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлены две структуры: STICK и TRIANGLE.
    • STICK содержит длину и имя stick.
    • TRIANGLE содержит массив side из трех элементов типа STICK и переменную perimeter.
  2. Определена функция create, которая создает треугольник с заданными сторонами и вычисляет его периметр.
    • Если треугольник существует (все стороны не равны нулю и выполняется условие из задачи), то вычисляется и записывается его периметр.
    • Выводится информация о созданном треугольнике.
  3. В функции main объявлены четыре STICK с именами от 'a' до 'd' и переменная cur для чтения длины stick.
    • С помощью цикла и функции scanf считываются длины всех stick.
    • Выводится сообщение о возможных треугольниках.
    • С помощью вложенного цикла и функции create создаются все возможные треугольники.
    • С помощью цикла и условного оператора определяется треугольник с максимальным периметром.
    • Выводится информация об этом треугольнике.
  4. В конце программы используется функция flushall для очистки буфера ввода-вывода и getchar для ожидания нажатия клавиши.
    • Возвращается 0, что означает успешное выполнение программы.

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


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

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

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