少於1000的正整數有多少個數的總和等於6?帕斯卡:範圍內的數字之和
不知道如何開始使用帕斯卡。在Python上,我的腳本看起來像這樣:
a = 1
b = 1000
for i in range(a,b):
........
我不知道如何訪問數字。如果有人能夠擡頭,我應該可以從這裏取得一些進展。
少於1000的正整數有多少個數的總和等於6?帕斯卡:範圍內的數字之和
不知道如何開始使用帕斯卡。在Python上,我的腳本看起來像這樣:
a = 1
b = 1000
for i in range(a,b):
........
我不知道如何訪問數字。如果有人能夠擡頭,我應該可以從這裏取得一些進展。
下面是解決方案,沒有不必要的轉換爲字符串。它通過獲取最右邊的數字,將其值添加到累加器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.
這給出了28的正確答案。如果有人有興趣,我可以通過手動解決它,在這裏實現簡單模式。在06-60之間有7個數字合計爲6。是從105-150增加到6的6個數字,204-240之間的5個數字等等。模式是7 + 6 + 5 + 4 + 3 + 2 + 1 = 28。這只是爲了確認我並不是以此作爲完成作業的唯一方式。我知道答案,但想要模擬我的算法並需要您的幫助才能這樣做。 – Cloud
你的問題基本上只是「在Pascal中如何完成for循環」...只需檢查文檔,這裏:http://pascal-programming.info/lesson4.php#JUMP3
另外我聞到功課。 ;)
忽略關於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(I)」行),則在迭代串和對它們求和的數字。
我想學習使用Pascal進行比賽。我需要學習如何處理這種情況,因爲考試中會出現類似的問題。 – Cloud
哇。在過去的15到20年裏我沒有看到Pascal代碼。你的問題是過去的一個爆炸!好奇心,我想問一下,你今天怎麼來帕斯卡的課程? – thb
我看到你對@MrPhi的回答。我曾在帕斯卡大學學習過一次,但那一年是1986年。希望這裏有人記得他們的帕斯卡。我已經忘記了。 – thb