2013-12-19 29 views
0

少於1000的正整數有多少個數的總和等於6?帕斯卡:範圍內的數字之和

不知道如何開始使用帕斯卡。在Python上,我的腳本看起來像這樣:

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

我不知道如何訪問數字。如果有人能夠擡頭,我應該可以從這裏取得一些進展。

+0

我想學習使用Pascal進行比賽。我需要學習如何處理這種情況,因爲考試中會出現類似的問題。 – Cloud

+0

哇。在過去的15到20年裏我沒有看到Pascal代碼。你的問題是過去的一個爆炸!好奇心,我想問一下,你今天怎麼來帕斯卡的課程? – 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的正確答案。如果有人有興趣,我可以通過手動解決它,在這裏實現簡單模式。在06-60之間有7個數字合計爲6。是從105-150增加到6的6個數字,204-240之間的5個數字等等。模式是7 + 6 + 5 + 4 + 3 + 2 + 1 = 28。這只是爲了確認我並不是以此作爲完成作業的唯一方式。我知道答案,但想要模擬我的算法並需要您的幫助才能這樣做。 – Cloud

2

你的問題基本上只是「在Pascal中如何完成for循環」...只需檢查文檔,這裏: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(I)」行),則在迭代串和對它們求和的數字。

+1

太糟糕了,問題沒有包括「不要使用字符串」。 – Ingo

+0

嗯,不能找到inttostr作爲標識符... – Cloud