دیباگ خردکردن


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

منظور از «خردکردن» nn تومان با سکه‌های c1,c2,,cmc_1, c_2, \dots, c_m \, تومانی این است که بتوان از هر کدام از این سکه‌ها تعدادی نامنفی برداریم به طوری که مجموع ارزش آن‌ها دقیقا برابر nn شود.

به صورت رسمی‌تر؛ اعداد صحیح و نامنفی مانند x1,x2,,xnx_1, x_2, \dots, x_n وجود داشته باشند به طوری که c1x1+c2x2++cmxm=nc_1 x_1 + c_2 x_2 + \dots + c_m x_m = n

توضیح تصویر

پیمان نجفی برنامه زیر را برای بررسی اینکه آیا می‌توان nn تومان را با استفاده از سکه‌های c1,c2,,cmc_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')
Python
کد سی‌پلاس‌پلاس
#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;
}
C++
کد جاوا
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; 
    }
}
Java

از شما می‌خواهیم برنامه‌ای بنویسید که با دریافت nn، mm عدد صحیح و مثبت و متمایز c1,c2,,cmc_1, c_2, \dots, c_m \, را چنان معرفی کند که راه حل بالا خروجی درستی به ازای این ورودی نداشته باشد.

ورودی🔗

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

خروجی🔗

در تنها سطر خروجی mm عدد صحیح و متمایز مثبت c1,c2,,cmc_1, c_2, \dots, c_m را چاپ کنید. 1cin1 \leq c_i \leq n

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

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

مثال🔗

ورودی نمونه ۱🔗

5 3
Plain text

خروجی نمونه ۱🔗

2 3 4
Plain text

خروجی برنامه بالا به ازای این ورودی NO خواهد بود؛ چون هیچ‌کدام از سکه‌ها به تنهایی نمی‌تواند 55 را تولید کند اما اگر از ۱ سکه 22 و ۱ سکه 33 استفاده کنیم؛ می‌توانیم مقدار 55 را تولید کنیم.

ورودی نمونه ۲🔗

5 4
Plain text

خروجی نمونه ۲🔗

-1
Plain text

هر طور که چهار سکه مختلف از 11 تا 55 برداریم، لزوما یکی از سکه‌های 11 یا 55 را برداشته‌ایم. بنابراین همواره می‌توان مقدار 55 را تولید کرد و برنامه بالا نیز این مورد را تشخیص می‌دهد.