Помогите пожайлуста разобратся с этой задачей. Описать функцию, которая возвращает сумму К=1,2,… наименьших цифр, входящих в запись числа типа Longint . Вот код только помоему он неправильно считает. Тут мне кажется вся проблема в К она поидее должна описыватся в var.
type A=array[0 .. 9] of byte;
function get_sum(n: longint; k: integer): integer; var arr:A; i,T,sum:integer; begin fillchar(arr, sizeof(arr), 0); while n > 0 do begin inc(arr[n mod 10]); n := n div 10; end;
sum := 0; T := 0; while k > 0 do begin while arr[T] = 0 do inc(T); inc(sum, T * arr[T]); inc(T); dec(k); end; get_sum := sum; end;
var n: longint; k: integer; begin write('vvedite chislo = '); readln(n); write('vvedite kol-vo min chifar = '); readln(k);
writeln('summa = ', get_sum(n, k)); readln; end.
volvo
12.01.2008 15:49
Цитата
Вот код только помоему он неправильно считает.
Пример неправильного подсчета приведи... Что вводишь, что выдает, и что по-твоему должно бы выдавать.
snopy
12.01.2008 15:59
Что выводится vvedite chislo = 142301 vvedite kol-vo min chifar = 3 summa = 4 а помоему должно получится 1+0+1=2
volvo
12.01.2008 16:05
Тогда тебе вот так надо сумму считать:
... sum := 0; T := 0; while k > 0 do begin while arr[T] = 0 do inc(T); repeat inc(sum, T); dec(arr[T]); dec(k); until (k = 0) or (arr[T] = 0); inc(T); end; ...
snopy
12.01.2008 16:26
Вот что у меня ещё получилось. только тут нужно вычесть максимальный элемент. Только тут нужно сделать так чтоб выводилась сразу сумма. А сумма минимальных находится просто сложением без максимального чмсла, тюею не нужно задавать какое именно кол-во минимальных цифр нужно порлучить
var ch:longint; procedure do_it(var l:longint); var i,j,n,s,min:integer; m:array[1..25] of integer; Begin i:=1; while l>0 do begin m[i]:=l mod 10; l:=l div 10; n:=i; inc(i) end; for j:=1 to n-1 do for i:=1 to n-j do begin if m[i]>m[i+1] then begin min:=m[i]; m[i]:=m[i+1]; m[i+1]:=min end; end; s:=0; for i:=1 to n do begin s:=s+m[i]; writeln(s) end; end; BEGIN read(ch); do_it(ch) End.
volvo
12.01.2008 16:31
Ну, поскольку ты мое сообщение проигнорировал, почему бы мне не поступить так же? Занимайся изобретением велосипеда дальше...
snopy
12.01.2008 16:35
я попробывал твоим методом только возникает ошибка. просто мне не нужно задавать кол-во минимальных элементов.
snopy
12.01.2008 18:20
Вооооот я ещё изменил программу но всёравно есть ошибка.
var ch:longint; procedure get_sum(var l:longint); var i,j,n,s,max,imax:integer; m:array[1..25] of integer; Begin i:=1; while l>0 do begin m[i]:=l mod 10; l:=l div 10; n:=i; inc(i) end; for j:=1 to n-1 do for i:=1 to n-j do begin if m[i]>m[i+1] then begin max:=m[1]; imax:=1; for i:=1 to n do if m[i]>max then begin max:=m[i]; imax:=i end; end; s:=0; for i:=1 to n do begin s:=s+m[i]; get_sum:=sum-m[imax]; end; end; BEGIN read(ch); get_sum(ch) End.
volvo
12.01.2008 18:30
Цитата
я попробывал твоим методом только возникает ошибка
Странно, правда? У меня программа отработала, а у тебя - ошибка (впрочем, как обычно, БЕЗ УТОЧНЕНИЯ - очень просто свалить все на ошибку, а главное - удобно: не придерешься, есть ошибка и ВСЕ ТУТ!!!)...
Приводи код, который выдал ошибку полностью + описание ошибки + название компилятора...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.