پاسخ سوال مسابقهی آسان کوئرا
در این نوشته تمرین “مسابقهی آسان” که در وبسایت کوئرا موجود است را برای شما کاربران عزیز حل کردهایم.
پاسخ سوال مسابقهی آسان کوئرا
سجاد در یک مسابقه شرکت کرده است. مسابقه به این صورت است که هر کس یک رقم (از 0 تا 9) انتخاب میکند و بایستی بگوید رقمی که انتخاب کرده در فاکتوریل روز تولدش چند بار تکرار شده است. مثلا سجاد رقم 6 را انتخاب میکند و اگر روز تولدش 5 مرداد است (که برابر با 129 امین روز سال است) بایستی بگوید رقم 6 چند بار در !129 تکرار شده است. برای این کار به سجاد کمک کنید.
ورودی سوال مسابقهی آسان
در سطر اول دو عدد میآید. عدد اول، روزی از سال است که سجاد به دنیا آمده است و عدد دوم رقم انتخابی اوست.
خروجی سوال مسابقهی آسان
تعداد تکرار رقم انتخابی سجاد در فاکتوریل روزی از سال که به دنیا آمده است را در یک خط چاپ کنید.
حل سوال مسابقهی آسان
#include <iostream>
using namespace std;
#define MAX 1000
int multiply(int x, int res[], int res_size);
void factorial(int n, int birth)
{
int res[MAX];
int counter = 0;
res[0] = 1;
int res_size = 1;
for (int x=2; x<=n; x++)
res_size = multiply(x, res, res_size);
for (int i=res_size-1; i>=0; i--)
if (res[i] == birth){counter++;}
cout << counter;
}
int multiply(int x, int res[], int res_size)
{
int carry = 0;
for (int i=0; i<res_size; i++)
{
int prod = res[i] * x + carry;
res[i] = prod % 10;
carry = prod/10;
}
while (carry)
{
res[res_size] = carry%10;
carry = carry/10;
res_size++;
}
return res_size;
}
int main()
{
int n, birth;
cin >> n >> birth;
factorial(n, birth);
return 0;
}
منبع سوال: وبسایت کوئرا
اگر روش حل بهتری برای “تمرین مسابقهی آسان” دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم.
اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.



















آیا الگوریتم قابلیت اجرا روی دادههای آنلاین را دارد؟
این الگوریتم برای محاسبه فاکتوریل اعداد تا حداکثر 1000 طراحی شده و قابلیت پردازش دادههای آنلاین را ندارد.
راهی برای بهینهتر کردن حافظه مصرفی در این الگوریتم وجود دارد؟
برای بهینهتر کردن حافظه مصرفی، میتوان از روشهای محاسباتی مستقیمتر برای شمارش تعداد ارقام خاص در فاکتوریل استفاده کرد تا نیازی به ذخیره کل اعداد فاکتوریل نباشد.
آیا میتوان این برنامه را با زبان پایتون هم پیادهسازی کرد؟
بله، این مسئله را میتوان با زبان پایتون نیز پیادهسازی کرد. در پایتون، کار با اعداد بزرگ و محاسبه فاکتوریل بسیار سادهتر است.
چرا از آرایه برای نگه داشتن فاکتوریل استفاده شده و راه سادهتری هم هست؟
استفاده از آرایه برای نگهداری فاکتوریل به دلیل بزرگ بودن اعداد حاصل از فاکتوریل و جلوگیری از سرریز شدن در انواع دادههای معمولی است. روشهای سادهتر ممکن است برای اعداد کوچکتر جوابگو باشند، اما برای مقادیر بزرگتر فاکتوریل، این روش کارآمدتر است.
آیا این روش برای اعداد خیلی بزرگ هم جواب میدهد؟
این کد برای محاسبه فاکتوریل اعداد تا ۱۰۰۰ طراحی شده است و ممکن است برای اعداد بسیار بزرگتر نیاز به بهینهسازی داشته باشد.