Задаци: Појам целобројног количника и остатка

Алгоритми и програми у програмском језику C: Појам целобројног количника и остатка.

Разломак у мешовит број

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

Мешовит број \(n\frac{c}{b}\) представља вредност \(n+\frac{c}{b}=\frac{n\cdot{b}+c}{b}\). У задатку тражимо мешовит број \(n\frac{c}{b}\) који је једнак неправом разломку \(\frac{a}{b}\) и према томе мора да важи \(a=n\cdot{b}+c\). При том важи и \(0\leq{c}<b\) (jер важи да је \(\frac{c}{b}<1\), и зато је \(c<b\), а уз то важи и \(c\geq{0}\)). Зато је, на основу дефиниције целобројног количника, цео део \(n\) мешовитог броја једнак целобројном количнику при дељењу бројиоца \(a\) имениоцем \(b\), бројилац \(c\) разломљеног дела мешовитог броја је остатак при дељењу \(a\) са \(b\), док именилац \(b\) разломљеног дела мешовитог бројa остаје исти као у полазном разломку.

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int a, b;
    scanf("%d%d", &a, &b);
    int n = a / b;
    int c = a % b;
    printf("%d %d %d", n, c, b);
    return 0;
}

Врста и колона

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

Ако се спортиста са редним бројем \(x\) налази у врсти \(v\) и колони \(k\) тада се испред њега налази \((v-1)\cdot{5}\) спортиста из претходних врста и \(k-1\) спортиста из претходних колона текуће врсте. Зато је \(x=5(v-1)+(k-1)\). Пошто \(k-1\) може бити \(0\), \(1\), \(2\), \(3\) или \(4\), важи да је \(k-1=x\mod{5}\) и да је \(v-1=x\div{5}\). Заиста, елементи прве колоне су бројеви \(0\), \(5\), \(10\) итд. који сви имају остатак \(0\) при дељењу са \(5\), елементи друге колоне су бројеви \(1\), \(6\), \(11\) итд. који сви имају остатак \(1\) при дељењу са \(5\) итд. Слично, елементи прве врсте су бројеви од \(0\) до \(4\) који при целобројном дељењу са \(5\) дају количник \(0\), елементи друге врсте су бројеви од \(5\) до \(9\) који при целобројном дељењу са \(5\) дају количник \(1\) итд.

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int x;
    scanf("%d", &x);
    printf("%d %d", x / 5 + 1, x % 5 + 1);
    return 0;
}

Шаховска табла број црних поља

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

На шаховској табли димензије \(n\times{m}\) укупан број поља је \(n\cdot{m}\). У сваком реду боја поља се наизменично мења. Редови почињу наизменично белом па црном бојом (први ред почиње белом бојом, други црном бојом, трећи ред белом, …). Ако је укупан број поља паран онда црних и белих поља има једнак број, а ако је укупан број поља непаран број белих поља је за 1 већи од броја црних поља (јер први ред почиње белим пољем). Према томе број црних поља једнак је целобројном количнику укупног броја поља и броја 2 тј. \((n\cdot{m})\div{2}=\lfloor{\frac{n\cdot{m}}{2}}\rfloor\).

Подсетимо се да оператор / израчунава целобројни количник када су оба операнда цели бројеви.

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int n, m;
    scanf("%d%d", &n, &m);
    int brCrnihPolja = (n * m) / 2;
    printf("%d", brCrnihPolja);
    return 0;
}

Икс-окс

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

Најелегантнији начин да одредимо квадрат у коме се налази пиксел је да посебно одредимо редни број врсте \(v\), а затим и редни број колоне \(k\) (оба редна броја бројимо од нуле до два и то почевши од доњег левог квадрата, па надесно тј. навише). Тада редни број квадрата можемо добити као \(3v+k+1\) (јер се квадрати броје од 1). Редни број врсте и колоне можемо одредити целобројним дељењем. Ако дужину странице означимо са \(a=100\), тада су \(x\) координате пиксела који припадају врсти \(0\) између \(1\) и \(a\), координате пиксела који припадају врсти \(1\) су између \(a+1\) и \(2a\), а врсти \(3\) су између \(2a+1\) и \(3a\). Ако пиксел има x-координату једнаку \(x\), редни број колоне је највећи број \(k\) такав да је \(k\cdot{a}+1\leq{x}\), тј. да је \(k\leq\frac{x-1}{a}\), па знамо да је \(k=\lfloor{\frac{x-1}{a}}\rfloor\). Слично, ако је y-координата пиксела једнака \(y\), број врсте је \(v=\lfloor{\frac{y-1}{a}}\rfloor\).

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    const int a = 100;
    int x, y;
    scanf("%d%d", &x, &y);
    int k = (x - 1) / a, v = (y - 1) / a;
    int kvadrat = 3 * v + k + 1;
    printf("%d", kvadrat);
    return 0;
}