2013-12-19 4 views
0

Сколько положительных целых чисел меньше 1000 имеют суммы их цифр, равные 6?Pascal: сумма цифр в диапазоне

Не знаю, как начать это с помощью Pascal. На Python мой скрипт будет выглядеть примерно так:

a = 1 
b = 1000 
for i in range(a,b): 
........ 

Я не знаю, как получить доступ к цифрам. Если бы кто-то мог дать мне голову, я должен был бы продвинуться отсюда.

+0

Я пытаюсь научиться использовать Pascal для соревнований. Мне нужно научиться разбираться с подобными ситуациями, так как на экзамене будут подобные проблемы. – Cloud

+0

Ничего себе. Я не видел код Pascal за последние 15 или 20 лет. Ваш вопрос - это взрыв из прошлого! Из любопытства, могу я спросить, как вы пришли в программу на Паскале сегодня? – thb

+0

Я вижу ваш ответ на @MrPhi. У меня был курс колледжа в Паскале один раз, но год был 1986. Надеюсь, кто-то здесь помнит их Паскаль. Я забыл об этом. – thb

ответ

0

Вот решение, без ненужного преобразования в строку. Он работает, получая правую цифру, добавляя ее значение к аккумулятору Total, а затем удаляя самую правую цифру, выполняя целочисленное деление на 10 и повторяя процесс до тех пор, пока у нас ничего не останется.

var 
    Value, Digit, Total, NumValues: Integer; 
    i: Integer; 
begin 
    NumValues := 0; 

    for i := 1 to 1000 do 
    begin 
    Value := i; 
    Total := 0; 

    repeat 
     Digit := Value mod 10; 
     Total := Total + Digit; 
     Value := Value div 10; 
    until Value = 0; 

    if Total = 6 then 
     Inc(NumValues); 
    end; 

    WriteLn ('I found ', NumValues, ' numbers whose digits add up to six'); 
    ReadLn; 
end. 
+1

Это дает правильный ответ 28. Если кто-то заинтересован, я решил это вручную, используя простой шаблон здесь. Есть 7 номеров, которые добавляют до 6 между 06-60. Это 6 чисел, которые добавляют к 6 из 105-150, 5 чисел между 204-240 и так далее. Образец равен 7 + 6 + 5 + 4 + 3 + 2 + 1 = 28. Это просто подтверждение того, что я не использовал это как единственное средство для завершения моей домашней работы. Я знал ответ, но хотел смоделировать мой алгоритм и нуждался в вашей помощи, чтобы сделать это. – Cloud

2

Ваш вопрос в основном - это просто «как работает цикл в Pascal» ... Просто проверьте документацию, например. здесь: http://pascal-programming.info/lesson4.php#JUMP3

Также я чувствую домашнюю работу. ;)

+0

Спасибо за ссылку, но какой будет алгоритм? – Cloud

+1

Я не буду решать ваш вопрос о Олимпиаде Австралийской Информатики для вас;) Для каждого номера вам нужно проверить, равна ли сумма его цифр 6 или нет. Если вам не удастся сделать это с этой информацией, у вас появятся гораздо более серьезные проблемы. – Draugr

1

Игнорирование комментариев от пользователя Pascal (это по-прежнему жизнеспособный язык и живет в основе Delphi, его синтаксис был заимствован для нескольких современных языков), этот вопрос на самом деле сложнее, чем можно было бы подумать. Сначала я покажу программу, потом объясню.

var 
i, j, found, total: integer; 
s: string; 

begin 
found:= 0; // how many numbers whose digits add up to six 
for i:= 1 to 1000 do 
    begin 
    s:= inttostr (i); 
    total:= 0; 
    for j:= 1 to length (s) do 
    total:= total + ord (s[j]) - ord ('0'); 
    if total = 6 then found:= found + 1; 
    end; 
writeln ('I found ', found, ' numbers whose digits add up to six'); 
readln 
end. 

Ключ преобразования номер индекса (I) в строку (это «IntToStr (я)» линия), то Перебор цифр строки и их суммирования.

+1

Жаль, что вопрос не включал «не использовать строки». – Ingo

+0

Хмм, inttostr не может быть найден как идентификатор ... – Cloud

Смежные вопросы