• محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۶۴ مگابایت

منظور از «خردکردن» \(n\) تومان با سکه‌های \(c_1, c_2, \dots, c_m \,\) تومانی این است که بتوان از هر کدام از این سکه‌ها تعدادی نامنفی برداریم به طوری که مجموع ارزش آن‌ها دقیقا برابر \(n\) شود.

به صورت رسمی‌تر؛ اعداد صحیح و نامنفی مانند \(x_1, x_2, \dots, x_n\) وجود داشته باشند به طوری که \[c_1 x_1 + c_2 x_2 + \dots + c_m x_m = n\]

توضیح تصویر

پیمان نجفی برنامه زیر را برای بررسی اینکه آیا می‌توان \(n\) تومان را با استفاده از سکه‌های \(c_1, c_2, \dots, c_m \,\) تومانی خرد کرد یا نه، طراحی کرده است. اما به دلیل فشار روزه، برنامه زیر نوشته شده که ایراد دارد.

برنامه‌های زیر همگی یکسان هستند و صرفا به زبان‌های مختلف ترجمه شده است.

کد پایتون

n, m = map(int, input().split())
c = list(map(int, input().split()))

for i in range(m):
    if n % c[i] == 0:
        print('YES')
        break
else:
    print('NO')

کد سی‌پلاس‌پلاس

#include <iostream>

using namespace std;

int main()
{
    int n, m;
    cin >> n >> m;
    int c[m];
    for (int i = 0; i < m; i++)
        cin >> c[i];
    
    for (int i = 0; i < m; i++)
    {
        if (n % c[i] == 0)
        {
            cout << "YES\n";
            return 0;
        }
    }
    cout << "NO\n";
    return 0;
}

کد جاوا

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt();
        int[] c = int[m];
        for (int i = 0; i < m; i++)
            c[i] = sc.nextInt();
        
        for (int i = 0; i < m; i++)
            if (n % c[i] == 0) {
                System.out.println("YES");
                return;
            }
        System.out.println("NO");
        return; 
    }
}

از شما می‌خواهیم برنامه‌ای بنویسید که با دریافت \(n\)، \(m\) عدد صحیح و مثبت و متمایز \(c_1, c_2, \dots, c_m \,\) را چنان معرفی کند که راه حل بالا خروجی درستی به ازای این ورودی نداشته باشد.

ورودی

در تنها سطر ورودی دو عدد صحیح و مثبت \(n\) و \(m\) که با فاصله از هم جدا شده‌اند، آمده است. \[1 \leq m \leq n \leq 100\]

خروجی

در تنها سطر خروجی \(m\) عدد صحیح و متمایز مثبت \(c_1, c_2, \dots, c_m\) را چاپ کنید. \[1 \leq c_i \leq n\]

اگر چند پاسخ برای مسئله وجود دارد یکی را به دلخواه چاپ کنید.

اگر هیچ پاسخی برای مسئله وجود ندارد؛ تنها در یک سطر -1 چاپ کنید.

مثال

ورودی نمونه ۱

5 3

خروجی نمونه ۱

2 3 4

خروجی برنامه بالا به ازای این ورودی NO خواهد بود؛ چون هیچ‌کدام از سکه‌ها به تنهایی نمی‌تواند \(5\) را تولید کند اما اگر از ۱ سکه \(2\) و ۱ سکه \(3\) استفاده کنیم؛ می‌توانیم مقدار \(5\) را تولید کنیم.

ورودی نمونه ۲

5 4

خروجی نمونه ۲

-1

هر طور که چهار سکه مختلف از \(1\) تا \(5\) برداریم، لزوما یکی از سکه‌های \(1\) یا \(5\) را برداشته‌ایم. بنابراین همواره می‌توان مقدار \(5\) را تولید کرد و برنامه بالا نیز این مورد را تشخیص می‌دهد.

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.