Задаци: Линеарне једначине и системи линеарних једначина

Алгоритми и програми у програмском језику C: Линеарне једначине и система линеарних једначина.

Oграда терасе

Прочитај текст задатка.

Нека је \(r\) непознато растојање између стубића. Тада \(n\) стубића покрива \(n\cdot{s} \ cm\). Између \(n\) стубића постоји \(n-1\) размак, један размак је између левог зида и првог стубића и један размак је између последњег стубића и десног зида. Дужина терасе у центиметрима је \(d\cdot{100}cm\). Дакле, важи услов

\[n\cdot{s} \ cm+(n+1)\cdot{r} \ cm=d\cdot{100} \ cm\]

Решавањем ове једначине добија се да је растојање између стубића

\[r=\frac{d\cdot{100}-n\cdot{s}}{n+1}\]

До истог закључка смо могли доћи и мало неформалније. Укупно постоји \(n+1\) размак чију дужину треба израчунати. Зато за поделу на \(n+1\) део остаје \((d\cdot{100}-n\cdot{s}) \ cm\), чиме се добија исто решење као претходно.

Предложено решење задатка

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int n;
    double d, s, r;
    scanf("%lf%d%lf", &d, &n, &s);
    r = (d * 100 - n * s) / (n + 1);
    printf("%.2lf", r);
    return 0;
}

Збирови по три странице правоугаоника

Прочитај текст задатка.

Обележимо странице правоугаоника са \(a\) и \(b\). Тада је обим правоугаоника \(2\cdot{a}+2\cdot{b}\), а површина је \(a\cdot{b}\). Ако je први збир три странице правоугаоника \(2\cdot{a}+b\) онда је збир друге три странице \(a+2\cdot{b}\). Тако добијамо две једначине \(2\cdot{a}+b=n\) и \(a+2\cdot{b}=m\) из којих можемо одредитии \(a\) и \(b\).

Један начин да се дође до решења је да се реши систем једначина неком од класичних метода решавања система једначина, чиме се добија да је \(a=\frac{2n-m}{3}\) и \(b=\frac{2m-n}{3}\), на основу чега се веома једноставно одређују обим и површина као \(O=2(a+b)\) и \(P=a\cdot{b}\).

Предложено решење задатка (1)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    double n, m;
    scanf("%lf%lf", &n, &m);
    double zbirStranica = (m + n) / 3;
    double O = 2 * zbirStranica;
    double a = m - zbirStranica;
    double b = n - zbirStranica;
    double P = a * b;
    printf("%.2lf\n%.2lf", O, P);
    return 0;
}

Просек на такмичењу

Прочитај текст задатка.

Просек свих ученика одређујемо као количник укупне суме поена свих ученика и броја ученика. Укупна сума поена свих ученика једнака је збиру суме поена свих ученика на првој страни и суме поена свих ученика на другој страни.

На првој страни има \(N-K\) ученика (разлика укупног броја ученика и броја ученика на другој страни). Ако поене ученика на првој страни обележимо са \(U_1,U_2,\ldots,U_{N-K}\) онда је

\[p_1=\frac{U_1 + U_2 +\ldots+ U_{N-K}}{N-K}\]

па је сума поена свих ученика на првој страни \(U_1+U_2+\ldots+U_{N - K}\) једнака \(p_1\cdot(N-K)\). Слично ако поене ученика на другој страни обележимо са \(U_{N-K+1},U_{N-K+2},\ldots,U_N\) онда је

\[p_2=\frac{U_{N-K+1}+U_{N-K+2}+\ldots+U_N}{K}\]

па је сума поена свих ученика на другој страни \(U_{N-K+1}+U_{N-K+2}+\ldots+U_N\) једнака \(p_2\cdot{K}\). Дакле, укупан број поена једнак је \(p_1\cdot(N-K)+p_2\cdot{K}\), па просек свих ученика израчунавамо као количник

\[\frac{p_1\cdot(N-K)+p_2\cdot{K}}{N}\]

Предложено решење задатка (1)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int N, K;
    double p1, p2;
    scanf("%d%d%lf%lf", &N, &K, &p1, &p2);
    double s1 = p1 * (N - K);
    double s2 = p2 * K;
    double prosek = (s1 + s2) / N;
    printf("%.2lf", prosek);
    return 0;
}