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

পাইথনে একটি এলিমেন্ট মুছে ফেয়ার অ্যারে ফেয়ার (fair) করার উপায় গণনার প্রোগ্রাম


মান লিজিয়ে একটি অ্যারে আছে nums। আমরা ঠিক একটি ইন্ডেক্স বাছাই করে সেখান থেকে এলিমেন্ট মুছে দিতে পারি। (ইন্ডেক্সগুলো মুছে দিলে পরিবর্তিত হতে পারে)। একটি অ্যারে fair বলা হয় যখন অড ইন্ডেক্সের সম ও ইভেন ইন্ডেক্সের সম সমান হয়। আমরা কতগুলো ইন্ডেক্স বাছাই করতে পারি যাতে মুছে দিলে nums ফেয়ার হয় সেটি বের করতে হবে।

যেমন, ইনপুট হলে nums = [5,3,7,2], তবে আউটপুট হবে:

  • ইন্ডেক্স ০ মুছলে: [3,7,2], ইভেন সম: ৩+২=৫, অড সম: ৭ (ফেয়ার নয়)

  • ইন্ডেক্স ১ মুছলে: [5,7,2], ইভেন সম: ৫+২=৭, অড সম: ৭ (ফেয়ার)

  • ইন্ডেক্স ২ মুছলে: [5,3,2], ইভেন সম: ৫+২=৭, অড সম: ৩ (ফেয়ার নয়)

  • ইন্ডেক্স ৩ মুছলে: [5,3,7], ইভেন সম: ৫+৭=১২, অড সম: ৩ (ফেয়ার নয়)

সমাধানের ধাপসমূহ

  • res := 0, sm1 := 0, sm2 := 0

  • i = 1 থেকে len(nums)-1 পর্যন্ত: যদি i%2==1 হয় sm1 += nums[i] অন্যথায় sm2 += nums[i]

  • যদি sm1 == sm2 হয়, তবে res += 1

  • i = 1 থেকে len(nums)-1 পর্যন্ত:

    • যদি i%2==1 হয়: sm1 = sm1 - nums[i] + nums[i-1]

    • অন্যথায়: sm2 = sm2 - nums[i] + nums[i-1]

    • যদি sm1 == sm2 হয়, তবে res += 1

  • res রিটার্ন করুন।

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন:

def solve(nums):
    res, sm1, sm2 = 0, 0, 0
    for i in range(1, len(nums)):
        if i % 2 == 1:
            sm1 += nums[i]
        else:
            sm2 += nums[i]
    if sm1 == sm2:
        res += 1
    for i in range(1, len(nums)):
        if i % 2 == 1:
            sm1 = sm1 - nums[i] + nums[i-1]
        else:
            sm2 = sm2 - nums[i] + nums[i-1]
        if sm1 == sm2:
            res += 1
    return res

nums = [5,3,7,2]
print(solve(nums))

ইনপুট

[5,3,7,2]

আউটপুট

1

  1. পাইথন প্রোগ্রামে অ্যারের যোগফল বের করা

  2. পাইথন প্রোগ্রাম অ্যারেতে সবচেয়ে বড় এলিমেন্ট বের করা

  3. পাইথনে অ্যারের যোগফল বের করা

  4. পাইথনে অ্যারে থেকে সর্বোচ্চ এলিমেন্ট বের করা