ধরুন আমাদের একটি সাইজ ভেরিয়েবল N আছে, আমাদের কাছে একটি ভ্যারিয়েবল SUM আছে এটি অ্যারেতে উপলব্ধ সমস্ত উপাদানের মোট যোগফল এবং আরেকটি ভেরিয়েবল K যেমন অ্যারেতে কোনো উপাদান নেই। K-এর থেকে বড়, আমাদের একটি অর্থোগোনাল অ্যারে খুঁজে বের করতে হবে যেখানে অ্যারের সমস্ত উপাদান আলাদা। যদি কোন সমাধান না হয় -1 রিটার্ন।
সুতরাং, যদি ইনপুট হয় N =4, SUM =16 K =9, তাহলে আউটপুট হবে [1,2,4,9]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
minimum_sum :=(N *(N + 1)) / 2
-
সর্বাধিক_সমষ্টি :=(N * K) -(N *(N - 1)) / 2
-
যদি সর্বনিম্ন_সম> SUM বা সর্বোচ্চ_সমষ্টি
-
রিটার্ন -1
-
-
res :=N + 1 আকারের একটি অ্যারে এবং 0 থেকে N
দিয়ে পূরণ করুন -
যোগফল :=সর্বনিম্ন_সমষ্টি
-
i :=N
-
যখন আমি>=1, কর
-
x :=যোগফল + (K - i)
-
যদি x
-
যোগফল :=যোগফল +(K - i)
-
res[i] :=K
-
কে :=কে - 1
-
-
অন্যথায়,
-
res[i] :=res[i] +(SUM - যোগফল)
-
যোগফল :=যোগফল
-
লুপ থেকে বেরিয়ে আসুন
-
-
i :=i - 1
-
-
রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def get_arr(N, SUM, K): minimum_sum = (N * (N + 1)) / 2 maximum_sum = (N * K) - (N * (N - 1)) / 2 if (minimum_sum > SUM or maximum_sum < SUM): return -1 res = [i for i in range(N + 1)] sum = minimum_sum i = N while(i >= 1): x = sum + (K - i) if (x < SUM): sum = sum + (K - i) res[i] = K K -= 1 else: res[i] += (SUM - sum) sum = SUM break i -= 1 return res N = 4 SUM = 16 K = 9 print(get_arr(N, SUM, K))
ইনপুট
4, 16, 9
আউটপুট
[0, 1, 2, 4.0, 9]