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

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

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

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

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

textual
Листинг программы
  1. #include<stdio.h>
  2.  
  3. struct STICK
  4. {   int length;
  5.     char name;
  6. }s[4];
  7.  
  8. struct TRIANGLE
  9. {   STICK side[3];
  10.     int perimeter;
  11. }tr[4];
  12.  
  13. void create(STICK x, STICK y, STICK z, int num)
  14. {   int i;
  15.     tr[num].side[0]=x;
  16.     tr[num].side[1]=y;
  17.     tr[num].side[2]=z;
  18.     tr[num].perimeter = 0;
  19.     if((x.length+y.length)>z.length && (y.length+z.length)>x.length && (x.length+z.length)>y.length)
  20.         tr[num].perimeter=x.length+y.length+z.length;
  21.     printf("\n\nTriangle %d",num);
  22.     for(i=0;i<3;i++)
  23.         printf("\nstick %c, length %d", tr[num].side[i].name, tr[num].side[i].length);
  24.     printf("\nperimeter %d",tr[num].perimeter);
  25.    
  26. }
  27.  
  28. int main()
  29. {   int i,cur,max;
  30.     char j;
  31.  
  32.     for(i=0,j ='a'; i<4; i++,j++)
  33.     {   printf("%c = ",j);
  34.         scanf("%d",&cur);
  35.         s[i].length = cur;
  36.         s[i].name = j;
  37.     }
  38.  
  39.     printf("\nPossible triangles:");
  40.     create(s[0],s[1],s[2],0);
  41.     create(s[0],s[2],s[3],1);
  42.     create(s[1],s[2],s[3],2);
  43.     create(s[0],s[1],s[3],3);
  44.  
  45.     for(i=0, max=0; i<4; i++)
  46.         if(tr[i].perimeter>max)
  47.         {   max = tr[i].perimeter;
  48.             cur = i;
  49.         }
  50.  
  51.     if(!max)
  52.         printf("\n\nNo triangles");
  53.     else
  54.     {   printf("\n\nTriangle created by:");
  55.         for(i=0;i<3;i++)
  56.             printf("\nstick %c, length %d", tr[cur].side[i].name, tr[cur].side[i].length);
  57.         printf("\nhas maximum perimeter %d",tr[cur].perimeter);
  58.     }
  59.  
  60.     flushall();
  61.     getchar();
  62.     return 0;
  63. }

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

В этом коде:

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы