PDA

View Full Version : سوال: الگوریتم جمع اعداد 1 تا n



Royal-mmmmmm
سه شنبه 09 مهر 1387, 13:35 عصر
:متفکر:
با سلام لطفا مرا در حل این الگوریتم کمک کنید :
الگوریتمی بنویسید که مقدار عبارت زیر را محاسبه و چاپ نماید .
s=1+2+3+.....+n:اشتباه:

whitehat
سه شنبه 09 مهر 1387, 14:04 عصر
برای محاسبه این دنباله از فرمول زیر استفاده کنید


n(n+1)/2

Royal-mmmmmm
سه شنبه 09 مهر 1387, 14:17 عصر
از راهنمایی شما بسیار ممنونم

Salar Ashgi
سه شنبه 09 مهر 1387, 14:53 عصر
سلام ، یا از روش زیر :


int sum=0;
for(int i=1;i<=n;i++)
sum+=i;
cout<<sum;


========================

در حالت کلی میتونی نکات زیر رو داشته باشی :


1+2+3+...+n = n*(n+1)/2
---------------------------
1^2+2^2+3^2 +... n^2 = n*(n+1)(2n+1)/6
1^3+2^3+3^3+ ... + n^3 = (n*(n+1)/2)^2
1^4+2^4+3^4 + ... + n^4 = n*(n+1)(6n^3+9n^2+n-1)/30


موفق و پیروز باشید !!!

m.abbasi.kia
چهارشنبه 10 مهر 1387, 01:17 صبح
سلام میتونی از کد بازگشتی زیر استفاده کنی


if n=1 then return 1
else
return sum(n)=n+sum(n-1);

negar.v
شنبه 28 آذر 1394, 10:34 صبح
سلام دوستان من یه سوال دارم در مورد مساله جمع اعداد یک تا n
همونطور که می دونین دو تا راه حل وجود داره یکی با استفاده از حلقه و دیگری با استفاده از n(n+1)/2
سوالی که من دارم اینه که با توجه به اینکه روش اول دارای پیچیدگی محاسباتی (O(n و روش دوم دارای (1)O است این جمله یعنی چی؟
there is a value of n at wich the closed form is guaranteed to overtake the loop

ممنون:لبخند::لبخند:

svmone
جمعه 04 دی 1394, 19:00 عصر
سلام دوستان من یه سوال دارم در مورد مساله جمع اعداد یک تا n


همونطور که می دونین دو تا راه حل وجود داره یکی با استفاده از حلقه و دیگری با استفاده از n(n+1)/2
سوالی که من دارم اینه که با توجه به اینکه روش اول دارای پیچیدگی محاسباتی (O(n و روش دوم دارای (1)O است این جمله یعنی چی؟
there is a value of n at wich the closed form is guaranteed to overtake the loop

ممنون:لبخند::لبخند:



در روش اول، دستور جمع اعداد باید به تعداد اعداد انجام بشه مثلا فرض کن n = 10 باشه و از عدد 1 تا 10 رو باید با هم جمع کنیم اول باید 1+2 اجرا بشه بعد نتیجش با 3 جمع باشه دوباره نتیجش با 4 جمع بشه ... و در نهایت نتیجه ی بدست اومده از جمع های قبلی با 10 جمع بشه، اینطوری 10 بار دستور جمع اجرا شده یعنی به تعداد اعداد که 10 تا است دستور اصلی که جمع است اجرا شده بنابراین داریم o(10) امکان داره که تعداد اعداد متغیر باشه مثلا باشه 12 - 10000 - 2000000000000 و ... ما برای اینکه الگوریتمی بنویسیم که مفید باشه نمیام یه الگوریتم بنویسیم که فقط 10 تا مقدار رو با هم جمع کنه و اگوریتمی مینویسیم که بتونه مقادیر متغیری رو با هم جمع کنه و مقادیر رو n در نظر میگیرم که هر تعدادی میتونه باشه و چون به تعداد n بار باید عمل جمع رو انجام بدیم میگیم بیشترین و کمترین مرتبه زمانی O(n) هستش.
اما در روش دوم با استفاده از فرمول n(n + 1) / 2 و تنها با یه محاسبه ریاضی به نتیجه میرسیم و فرمول ریاضی n ( n + 1) / 2 که دستور اصلی هستش تنها و تنها یکبار اجرا میشه بنابراین مرتبه زمانی O(1) است که از روش اول بسیار بهینه تر است.