কম্পিউটার টিউটোরিয়াল

পাইথনে অড এবং ইভেন ইনডেক্সের যোগফল সমান করতে কত উপাদান মুছে ফেলতে হবে তা বের করার প্রোগ্রাম

একটি সংখ্যা তালিকা (nums) দেওয়া আছে। একটি ফাংশন f(i) ইনডেক্স i-এ থাকা উপাদানটি মুছে দিলে বাকি তালিকার ইভেন ইনডেক্সের যোগফল এবং অড ইনডেক্সের যোগফল সমান হলে true রিটার্ন করে। এমন কতগুলো ইনডেক্স আছে তা বের করতে হবে।

সমস্যা উদাহরণ

ইনপুট: nums = [6, 8, 5, 2, 3]
আউটপুট: 2

ব্যাখ্যা:

  • ৮ মুছে দিলে: [6, 5, 2, 3] → ইভেন ইনডেক্স যোগফল = ৬+২=৮, অড ইনডেক্স যোগফল = ৫+৩=৮
  • ২ মুছে দিলে: [6, 8, 5, 3] → ইভেন ইনডেক্স যোগফল = ৬+৫=১১, অড ইনডেক্স যোগফল = ৮+৩=১১

সমাধানের পদ্ধতি (প্রিফিক্স সাম ব্যবহার)

  1. n := len(nums)
  2. ২ × (n+1) আকারের ২D অ্যারে a তৈরি করুন, সব শূন্য দিয়ে ভরুন
  3. প্রতিটি ইনডেক্স i এবং মান x এর জন্য:
    • a[0][i+1] = a[0][i]
    • a[1][i+1] = a[1][i]
    • a[i%2][i+1] += x
  4. c := 0, s := sum(nums)
  5. প্রতিটি i (০ থেকে n-১) এর জন্য:
    • e = a[0][i] - a[0][0] + a[1][n] - a[1][i+1]
    • যদি e * 2 == s - nums[i] হয়, তবে c += 1
  6. c রিটার্ন করুন

পাইথন কোড

def solve(nums):
    n = len(nums)
    a = [[0] * (n + 1), [0] * (n + 1)]
    for i, x in enumerate(nums):
        a[0][i + 1] = a[0][i]
        a[1][i + 1] = a[1][i]
        a[i % 2][i + 1] += x
    c = 0
    s = sum(nums)
    for i in range(n):
        e = a[0][i] - a[0][0] + a[1][n] - a[1][i + 1]
        if e * 2 == s - nums[i]:
            c += 1
    return c

nums = [6, 8, 5, 2, 3]
print(solve(nums))  # আউটপুট: 2

টেস্ট কেস

ইনপুট: [6, 8, 5, 2, 3]
আউটপুট: 2

  1. পাইথন প্রোগ্রাম লিস্টের উপাদানগুলোর যোগফল বের করা

  2. একটি সংখ্যার সম ফ্যাক্টরের যোগফল বের করার পাইথন প্রোগ্রাম

  3. পাইথনে একটি সংখ্যার বিষম গুণনীয়গুলোর যোগফল বের করার প্রোগ্রাম

  4. পাইথনে একটি সংখ্যার জোড় গুণনীয়গুলোর যোগফল বের করার প্রোগ্রাম