Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
rechehvt
0 / 0 / 0
Регистрация: 15.05.2015
Сообщений: 1
1

10 видов монет достоинством a1..a10

15.05.2015, 05:51. Просмотров 967. Ответов 17
Метки нет (Все метки)

Даны натуральные числа, a1..a10. Предположим, что имеются 10 видов монет достоинством a1..a10. Обозначим через Bk-это число решения уравнений a1x1+..+a10x10=R, где Xi может принимать целые неотрицательные значения. Получить B1...B10... решение на паскаль
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2015, 05:51
Ответы с готовыми решениями:

У покупателя есть n монет достоинством H(1),..., H(n). У продавца есть m монет достоинством B(1),...,B(m)
У покупателя есть n монет достоинством H(1),..., H(n). У продавца есть m монет...

Определить сколько монет достоинством в 20 и 50 рублей и каковы их порядковые номера
В коллекции нумизмата не более чем 90 монет всех возможных...

Как наименьшим количеством монет можно выплатить N копеек?Предполагается,что в достаточном количестве имеются монеты достоинством 1,2.3.5.10,15,20,50
Дано натуральное число N.Как наименьшим количеством монет можно выплатить N...

Найти минимальное число монет достоинством в 50, 10, 5, и 1 копейку, необходимое для представения некоторой суммы
Найти минимальное число монет достоинством в 50, 10, 5, и 1 копейку,...

В озере водится несколько видов рыб. Три рыбака поймали рыб, представляющих некоторые из имеющихся видов
В озере водится несколько видов рыб. Три рыбака поймали рыб, представляющих...

17
Joy
Эксперт Pascal/Delphi
2163 / 1194 / 1434
Регистрация: 29.08.2014
Сообщений: 4,373
15.05.2015, 11:05 2
Лучший ответ Сообщение было отмечено rechehvt как решение

Решение

rechehvt, а задание точно корректно написано?
Цитата Сообщение от rechehvt Посмотреть сообщение
a1x1+..+a10x10=R
тут может равно k вместо R?

Добавлено через 37 минут
решал не я:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
label 1;
var
  a,b,c:array[1..10] of integer;
  i,j,n,s,k:integer;
begin
  write('R=');readln(k);
  write('a1,a2...a10=');
  for i:=1 to 10 do begin read(a[i]);b[i]:=k div a[i];end;
1:s:=0;
  for i:=1 to 10 do s:=s+a[i]*c[i];
  n:=n+ord(s=k);
  for i:=10 downto 1 do begin
    if c[i]=b[i] then for j:=i to 10 do c[j]:=0
  else begin c[i]:=c[i]+1;goto 1;end;
  end;
  writeln(n);
end.
1
Никита4502
0 / 0 / 0
Регистрация: 20.11.2017
Сообщений: 22
24.11.2017, 05:04 3
он ошибку выдает

Добавлено через 25 секунд
ошибку выдает
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3882 / 2864 / 3639
Регистрация: 05.06.2014
Сообщений: 14,083
24.11.2017, 11:11 4
Никита4502, проверено в fpc в режиме совместимости. Нет никаких ошибок.
0
Никита4502
0 / 0 / 0
Регистрация: 20.11.2017
Сообщений: 22
25.11.2017, 13:07 5
ZX Spectrum-128, в Pascal ABC выдаёт ошибку в 11 строке "функция ORD с параметрами указанных типов не найдена".
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3882 / 2864 / 3639
Регистрация: 05.06.2014
Сообщений: 14,083
25.11.2017, 16:53 6
Никита4502, раздел Турбо Паскаля!!!
А вы работаете в Pascal ABC!!!
0
Никита4502
0 / 0 / 0
Регистрация: 20.11.2017
Сообщений: 22
26.11.2017, 04:46 7
ZX Spectrum-128, а как тогда ее записать в паскале abc?
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3882 / 2864 / 3639
Регистрация: 05.06.2014
Сообщений: 14,083
27.11.2017, 10:25 8
Никита4502, именно в pabc? В pabc.net работает.
0
Никита4502
0 / 0 / 0
Регистрация: 20.11.2017
Сообщений: 22
27.11.2017, 11:43 9
ZX Spectrum-128, мне в abc надо
0
Cyborg Drone
Модератор
5293 / 3171 / 2442
Регистрация: 17.08.2012
Сообщений: 10,186
28.11.2017, 00:21 10
Никита4502, в Pascal ABC тип boolean порядковым не является. Замените
Pascal
11
  if s = k then inc(n);
0
Никита4502
0 / 0 / 0
Регистрация: 20.11.2017
Сообщений: 22
28.11.2017, 12:24 11
Cyborg Drone, goto 1; и label 1 можно убрать? зачем мне метка? что значит downto?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
label 1;
var
  a,b,c:array[1..10] of integer;
  i,j,n,s,k:integer;
begin
  write('R=');
  readln(k);
  write('a1,a2...a10=');
  for i:=1 to 10 do begin read(a[i]);
  b[i]:=k div a[i];
  end;
1:s:=0;
  for i:=1 to 10 do s:=s+a[i]*c[i];
  if s = k then inc(n);
  for i:=10 downto 1 do begin
    if c[i]=b[i] then for j:=i to 10 do c[j]:=0
  else begin c[i]:=c[i]+1;
  goto 1;
  end;
  end;
  writeln(n);
end.
0
Cyborg Drone
Модератор
5293 / 3171 / 2442
Регистрация: 17.08.2012
Сообщений: 10,186
28.11.2017, 15:02 12
goto и label убрать можно. Однако, замечу, что в данном случае применение goto оправдано. Без него, если не перерабатывать алгоритм, придётся вводить лишнюю переменную:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var
  a, b, c: array[1..10] of integer;
  i, j, n, s, k: integer;
  q: boolean;
begin
  write('R = ');
  readln(k);
  write('a1 a2 ... a10 = ');
  for i := 1 to 10 do
    begin
      read(a[i]);
      b[i] := k div a[i];
    end;
  readln;
  repeat
    s := 0;
    for i := 1 to 10 do s := s + a[i] * c[i];
    if s = k then inc(n);
    for i := 10 downto 1 do
      begin
        q := c[i] = b[i];
        if q
          then for j := i to 10 do c[j] := 0
          else begin
            inc(c[i]);
            break
          end
      end
  until q;
  writeln(n);
  readln
end.
Что значит downto? Ну, во-первых, оно значит, что Вы не потрудились прочитать хотя бы 50 страниц любой книжки по любом паскалю. А вообще, for ... downto ... do - это предопределённый цикл с автодекрементом параметра цикла. Короче, если написано to, значит, к i прибавляется 1 на каждой итерации цикла, если написано downto, значит, от i вычитается 1 на каждой итерации цикла.
0
Никита4502
0 / 0 / 0
Регистрация: 20.11.2017
Сообщений: 22
29.11.2017, 04:49 13
Cyborg Drone, да мне до лампочки, лишь бы сдать, но спасибо.
0
Никита4502
0 / 0 / 0
Регистрация: 20.11.2017
Сообщений: 22
06.12.2017, 13:13 14
Cyborg Drone, простите меня пожалуйста, сидел разбирался с этой задачей и не до конца ее понял. Вы бы не могли бы поставить к ней комментарии? Или объясните мне с 15 по 29 строчку.
0
Cyborg Drone
Модератор
5293 / 3171 / 2442
Регистрация: 17.08.2012
Сообщений: 10,186
06.12.2017, 17:30 15
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

С комментариями:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//a[i] - достоинство i-й монеты
//b[i] - максимальное количество монет достоинством a[i],
//       сумма которых не превышает заданную стоимость k
//с[i] - текущее количество каждой монеты
//i, j - счётчики
//n    - количество найденных наборов
//s    - текущая сумма
//k    - целевая сумма
//q    - факт того, что текущее количество монет текущего достоинства достигло максимума
var
  i, j, n, s, k: integer;
  q: boolean;
begin
  write('R = ');
  readln(k); //ввод целевой суммы
  write('a1 a2 ... a10 = ');
  for i := 1 to 10 do //цикл ввода достоинств монет
    begin
      read(a[i]); //ввод достоигства i-й монеты
      b[i] := k div a[i]; //расчёт максимального количества монет a[i], помещающихся в целевую сумму
    end;
  readln;
  repeat //цикл перебора вариантов выплаты
    s := 0; //текущая сумма пока равна 0
    for i := 1 to 10 do s := s + a[i] * c[i]; //цикл подсчёта текущей суммы: к сумме добавляются цены текущих количеств монет
    if s = k then inc(n); //если текущая сумма достигла целевой суммы, то инкрементируем количество найденных
    for i := 10 downto 1 do //цикл формирования наборов
      begin
        q := c[i] = b[i]; //факт достижения максимального значения текущего количества i-й монеты
        if q //если количество i-х монет максимально
          then for j := i to 10 do c[j] := 0 //то обнуляем текущие количества от i-й монеты до последней
          else begin //иначе (если не максимально)
            inc(c[i]); //инкрементируем количество i-й монеты
            break //и досрочно выходим из цикла формирования наборов
          end
      end
  until q; //если последняя монета включена в сумму максималльным количеством, прекращаем формировать наборы
  writeln(n); //печатаем количество наборов
  readln
end.
0
Никита4502
0 / 0 / 0
Регистрация: 20.11.2017
Сообщений: 22
23.12.2017, 11:48 16
Cyborg Drone, информатичка сказала, что 29 строчка неправильная, типо не бывает такого выражения. Что мне ей ответить на это? Программа то работает!
0
Puporev
Модератор
54686 / 42104 / 29072
Регистрация: 18.05.2008
Сообщений: 99,357
23.12.2017, 11:59 17
Цитата Сообщение от Никита4502 Посмотреть сообщение
29 строчка неправильная,
Строка 29
Pascal
1
begin
Что тут может не работать?
0
Cyborg Drone
Модератор
5293 / 3171 / 2442
Регистрация: 17.08.2012
Сообщений: 10,186
25.12.2017, 23:00 18
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Pascal
29
  until q;
Эта? Скажите преподавателю, что q - это булева переменная, и выход из цикла происходит тогда, когда значение этой переменной есть истина, то есть, тогда, когда q=true. И ещё скажите, что программа прекрасно компилируется, никакой ошибки строка 29 не вызывает, следовательно, такое выражение бывает.

Просто преподаватель Ваш привык видеть после until логическое выражение, типа until a > b, а то, что логическая переменная тоже является логическим выражением, до её мозгов пока не дошло. Типа, until q - и всё? Караул! А с чем же q сравнивается? А q и не надо с чем-то сравниваться, так как оно и есть результат сравнения (строка 21).
1
25.12.2017, 23:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2017, 23:00

Массив: Определить, сколько видов товара имеют стоимость меньшую, чем средняя стоимость всех видов товара.
В массиве записана информация о стоимости 20 видов товара. Определить, сколько...

Определить, сколько видов товара имеют стоимость меньшую, чем средняя стоимость всех видов товара.
В массиве записана информация о стоимости 20 видов товара. Определить, сколько...

Даны два массива а(10) и b(10). Вычислить a1*b10+a2*b9+...+a10*b1
даны два массива а(10) и b(10) вычислить a1*b10+a2*b9+...+a10*b1


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru