Processing math: 46%

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:مرحله ی دوم:دوره ی ۴:سوال ۴

سوال ۴

الگوریتم زیر را در نظر بگیرید. این الگوریتم عناصر آرایه‌ی a را محاسبه می‌کند. عنصر iام آرایه‌ی a را در این الگوریتم با نماد a[i] نشان داده‌ایم.

۱) a[0] را مساوی ۰ و a[1] را مساوی ۱ قرار بده.

۲) k را مساوی ۲ قرار بده.

۳) a[k] را مساوی با a[k1] قرار بده.

۴) به مقدار a[k] یکی اضافه کن.

۵) F را مساوی ۱ قرار بده.

۶) برای هر i که 1≤i≤k–1

  • برای هر j که 0 \le j \le i-1 این مرحله را تکرار کن:
    • اگر a[k] - a[i] = a[i] - a[j] است٬ F را مساوی ۰ قرار بده.

۷) اگر F = 0 است، به مرحله‌ی (۴) برو.

۸) به مقدار k یکی اضافه کن و اگر k≤1373 است، به مرحله‌ی (۳) برو.

۹) پایان

الگوریتم فوق به زبان پاسکال در صفحه‌ی بعد نوشته شده است.

مسأله به این صورت است:

الف) مقدار a[0]،a[1]،… و a[10] در انتهای الگوریتم چقدر است؟

ب) تمام iهایی را پیدا کنید که مقدار a[i] در انتهای الگوریتم بر ۳ قابل قسمت باشد. برای ادعای خود دلیل بیاورید.

ج) مقدار a[1373] در انتهای الگوریتم چقدر است؟ چرا؟

;Program problem4

Var

; a: array [0…1373] of LongInt

k, i , j , F: Integer;

begin

;a[0] := 0; a[1] := 1

for k := 2 to 1373 do

begin

;a[k] := a[k – 1]

repeat

;a[k] := a[k] + 1

;F := 1

fori := 1 to k – 1 do

for j := 0 to I – 1 do

if (a[k] – a[i] = a[i] – a[j]) then

;F := 0

;Until (F = 1)

;end

.end


ابزار صفحه