program konfety; var t: real; i: integer; begin WriteLn('Введите стоимость 1 кг конфет (в рублях): '); Read(t); for i := 1 to 10 do WriteLn('Стоимость ', i, ' кг конфет: ', i*t); end.
Смысл такой: - цена 1 кг конфет (вещественный тип real) - счетчик, который будет увеличиваться на единицу после каждого выполнения тела цикла .
WriteLn() выводит на экран строку, которая заключена в кавычки. Не забываем ставить точку с запятой после операций.
Read(t) дает вам возможность вписать, сколько стоит килограмм конфет, и присваивает переменной то значение, которое мы ввели.
Далее идет цикл , который по сути вот что делает: Для каждого целого i от 1 до 10 сделай вот что: Выведи на экран строку 'Стоимость ', потом значение i, потом строку 'кг конфет: ', потом число i умноженное на t
После того, как закончишь обрабатывать все это в последний десятый раз, переходи дальше.
А дальше у нас end (последний end. всегда с точкой).
Такой вариант на простом паскале со стратегией жадность
var n, s, i: integer; x: array[1..100]of integer; answer: string;
begin readln(n); for i := 1 to n do read(x[i]); readln(s);
answer := IntToStr(s) + ' = '; for i := n downto 1 do begin answer := answer + IntToStr(s div x[i]) + '*' + IntToStr(x[i]); s := s mod x[i]; if i > 1 then answer := answer + ' + '; end;
if s <> 0 then writeln('NO') else writeln(answer); end.
Более полный и правильный вариант решения, но и куда более сложный
//PascalABC.Net 3.1 сборка 1200 uses System.Collections.Generic; uses System; var x := new List<integer>; c := new List<Tuple<string, integer>>;
procedure getParcelling(sum, step: integer; coefficients: string; count: integer); begin if step >= x.Count then begin if sum = 0 then c.Add((coefficients, count)); Exit; end; if step < 0 then step := 0;
for var j := 0 to (sum div x[step]) do begin var s := ''; if j > 0 then begin if step > 0 then s += ' + '; s += IntToStr(j) + '*' + IntToStr(x[step]); end; getParcelling(sum - x[step] * j, step + 1, coefficients + s, count + j); end; end;
begin x := ReadArrInteger('x:', ReadInteger('n =')).ToList; var sum := ReadInteger('sum =');
getParcelling(sum, 0, '', 0); if c.Count = 0 then writeln('No') else begin var min := c.Min(cc -> cc.Item2); Println(c.Where(cc -> cc.Item2 = min)); end; end.
var t: real;
i: integer;
begin
WriteLn('Введите стоимость 1 кг конфет (в рублях): ');
Read(t);
for i := 1 to 10 do
WriteLn('Стоимость ', i, ' кг конфет: ', i*t);
end.
Смысл такой: - цена 1 кг конфет (вещественный тип real)
- счетчик, который будет увеличиваться на единицу после каждого выполнения тела цикла .
WriteLn() выводит на экран строку, которая заключена в кавычки. Не забываем ставить точку с запятой после операций.
Read(t) дает вам возможность вписать, сколько стоит килограмм конфет, и присваивает переменной то значение, которое мы ввели.
Далее идет цикл , который по сути вот что делает:
Для каждого целого i от 1 до 10 сделай вот что:
Выведи на экран строку 'Стоимость ', потом значение i, потом строку 'кг конфет: ', потом число i умноженное на t
После того, как закончишь обрабатывать все это в последний десятый раз, переходи дальше.
А дальше у нас end (последний end. всегда с точкой).
Конец.
var
n, s, i: integer;
x: array[1..100]of integer;
answer: string;
begin
readln(n);
for i := 1 to n do
read(x[i]);
readln(s);
answer := IntToStr(s) + ' = ';
for i := n downto 1 do
begin
answer := answer + IntToStr(s div x[i]) + '*' + IntToStr(x[i]);
s := s mod x[i];
if i > 1 then
answer := answer + ' + ';
end;
if s <> 0 then
writeln('NO')
else
writeln(answer);
end.
Более полный и правильный вариант решения, но и куда более сложный
//PascalABC.Net 3.1 сборка 1200
uses System.Collections.Generic;
uses System;
var
x := new List<integer>;
c := new List<Tuple<string, integer>>;
procedure getParcelling(sum, step: integer; coefficients: string; count: integer);
begin
if step >= x.Count then begin
if sum = 0 then c.Add((coefficients, count));
Exit;
end;
if step < 0 then step := 0;
for var j := 0 to (sum div x[step]) do
begin
var s := '';
if j > 0 then begin
if step > 0 then s += ' + ';
s += IntToStr(j) + '*' + IntToStr(x[step]);
end;
getParcelling(sum - x[step] * j, step + 1, coefficients + s, count + j);
end;
end;
begin
x := ReadArrInteger('x:', ReadInteger('n =')).ToList;
var sum := ReadInteger('sum =');
getParcelling(sum, 0, '', 0);
if c.Count = 0 then
writeln('No')
else begin
var min := c.Min(cc -> cc.Item2);
Println(c.Where(cc -> cc.Item2 = min));
end;
end.