PDA

View Full Version : پیدا کردن الگوریتم جمع 2 عدد



en.kamali.ir
دوشنبه 05 اسفند 1387, 13:11 عصر
سلام به همه بزرگواران .
دوستان نیاز به الگوریتمی دارم مه 2 عدد رو جمع کنه و بعد از جمع بتونیم اعداد رو حدس بزنیم .
دستمون هم بازه که چند متغیر برای اطلاعات جداگانه بگیریم
این الگوریتم قراره برای اعداد در مبنای 2 عمل کنه فرض کنید 2 عدد 4 بیتی رو با هم جمع میکنیم به طور مثال
1001 +
1100
------------
10101
جمع 2 عد 4 بیتی حد اکثر جوابی 5 بیتی دارد شما 2 بیت هم در اول یا آخر برای کنترل میتونیم قرار بدیم که بشه از روی اون این 2 عدد رو حدس زد .
نمیدونم واضح توضیح دادم یا نه
ولی اگه ناقص بود ازم بپرسید تا راهنمایی کنم

Evil 69
سه شنبه 06 اسفند 1387, 23:16 عصر
یعنی ما به سیستم یک عدد بدیم و سیستم به ما بگه که این عدد از جمع چه عددی بوجود اومده .
در این صورت ما میتونیم تعداد زیادی جواب داشته باشیم که مثلا اگر حاصل اون دو عدد مقدار 1010 یعنی 10 باشه خوب این عدد می تونه از جمع 9+1 یا 5+5 یا 6+4 و ... بوجود اومده باشه .
ایا این الگوریتم باید تمام جواب ها را بده یا نه فقط همون دو عددی رو که واقعا در تولید این عدد نقش داشتن رو بده؟

en.kamali.ir
چهارشنبه 07 اسفند 1387, 00:41 صبح
سلام
نه من اون دو عدد مشخص که در این عمل جمع نقش داشتند رو میخوام .
طبیعی هست که این کار در اولین نگاه غیر ممکنه ولی اگر دستتان را یک مقدار بازتر بگذارم شاید راه حلی نمایان شود
شما 2 بیت هم میتوانید به عنوان بیت کنترلی در نظر بگیرید . مثال میزنم .
شما یک بیت در نظر بگیر که مشخص کنه عدد اولت زوجه یا فرد .
یک بیت دیگه رو هم خودت در نظر بگیر
در واقع با استفاده از حاصل جمع این دو عدد و با استفاده از 2 ییت کنترلی شما اگه یک عدد رو بتونی حدث بزنی سوال حل شده .
چرا که با کم کردن عدد اول از حاصل جمع شما عدد دوم رو هم بدست آوردید .
شما ممکنه دستت زیاد باز نباشه توی بیت های کنترلی بنا براین سوال رو ارتقا میدم به این شکی
جمع 2 عدد 5 بیتی و پیدا کردن با استفاده از 3 بیت کنترلی
جمع 2 عدد 6 بیتی و پیدا کردن با استفاده از 4 بیت کنترلی
جمع 2عدد 7 بیتی و پیدا کردن با استفاده از 5 بیت کنترلی
جمع 2عدد 8 بیتی و پیدا کردن با استفاده از 6 بیت کنترلی
جمع 2عدد 9 بیتی و پیدا کردن با استفاده از 7 بیت کنترلی
این تعدا رو تا هر اندازه که خواستید میتونید بالا ببرید .
کمک کردن افراد توی این سایت به همدیگه هیچ جنبه مالی رو نداره . و فقط جنبه انسان دوستانه داره
با این وجود دوستان در نظر داشته باشند که به علت اینکه پیدا کردن این الگوریتم برای من بسیار با اهمیت هست و همچنین در صورت پیدا کردن راهی برای این مسئله خود من هم از لحاظ مالی تا حدودی تامین میشوم این قول رو میدم که در صورت به سر انجام رسیدن این موضوع فردی رو که راهنمایی کرده با خود شریک کنم .

blue_lotus
چهارشنبه 07 اسفند 1387, 20:07 عصر
سلام

این امکان وجود نداره که اطلاعات رو در متغیر و فایلی ذخیره کنید و بعد بازخوانی کنید؟
یا مستقیم از حافظه ی اصلی دوباره اطلاعات ورودی کاربر رو دریافت کنیم؟

amir_saniyan
پنج شنبه 08 اسفند 1387, 00:30 صبح
سلام
فکر کنم اگه اعداد مثبت باشند قضیه خیلی ساده است.
مثلا جمع دو عدد 15 شده، بنابراین تو تا حلقه تو در توی for باید بنویسی و چک کنی که جمع اون دو عدد 15 میشه یا نه:


int n = 15;
for(int i= 0; i < n; i++)
for(int j = 0; j < n; j++)
if((i + j) == 15)
{
// جمع دو عدد 15 شده.
// حالا باید بیت‌های کنترلی چک بشوند
}


لازم نیست همه چیز از ابتدا در مبنای دو چک بشه، زمانی که جمع i و j عدد مورد نظر ما شد (مثلا 15) حالا باید دو عدد رو در مبنای 2 برد و سپس بیت‌های کنترلی چک بشوند.

موفق باشی

en.kamali.ir
پنج شنبه 08 اسفند 1387, 14:19 عصر
ممنونم از وقتی که میذارید .
اما من مشکل توی قسمت برنامه نویسی ندارم مشکل در پیدا کردن راهکاری است که با استفاده از اون بیت های کنترلی بتونم عدد رو حدس بزنم .
بزار سوال رو از این باب هم بپرسم :
من 2 عدد در ذهنم میگیرم
که مجموع این 2 عدد برابر با222 میباشد
دوستان برای پی بردن به عدد های توی ذهن من میتونند 2 سال مطرح کنند .
که با استفاده از اون 2 سوال و مجموع ارقام که خودم بهتون دادم اعداد رو حدس بزنید.
به طور مثال خودم به عنوان اولین سوال کننده پرسش و پاسخی را طراحی میکنم :
آیا عدد اول زوج است ؟ بله
عدد اول در کدام دهک قرار دارد ؟ دهک دوم
سوال های من تمام شد اما نتونستم به جواب برستم حالا میخواهیم با همین 2 سوالی که پرسیدم چک کنیم ببینیم میشه به جواب رسید یا نه .؟
معلوم شد که عدد مورد نظر من زوجه بنا براین در این مجموعه است
0..2..4..6..8.......998
و در دهک دوم پس باز هم جواب ها محدود تر شد به این ترتیب
100..102..104..106........198
دوستان من مدت زمان زیادی هست که روی این الگوریتم دارم کار میکنم و نسبتا تجربیاتی هم بدست آوردم که میگم که شما هم اونها رو لحاظ کنید .
دقت کنید سوال اول من 50 در صد جواب ها رو حذف کرد و سوال دوم به تنهایی 90 در صد جواب ها رو حذف کرد . طبق تجربه اگر سوالی مطرح کنید که بیش از 90 در صد جواب ها رو حذف کنه در واقع سوال حل شده
تکرار میکنم سوالی بپرسید که بیش از 90 در صد از گزینه ها رو حذف کنه

en.kamali.ir
جمعه 09 اسفند 1387, 13:55 عصر
یک چیز به ذهنم رسید میگم :
من یک عدد در ذهنم دارم و به شما میگم که در دهک دوم قرار دارد شما از این راهنمایی چه چیزه دیگری را میتوانید متوجه شوید ؟
مثلا با همین سوال میتوانید تشخیص دهید عدد زوج است یا فرد یا مثلا به 3 بخشپذیر هست یا نه . لطفا دوستان یکم فکر کنید خواهش می کنم واقعا گیرم

Sundown
جمعه 09 اسفند 1387, 15:32 عصر
سلام دوست عزیز
من یه راه حلی پیدا کردم نمی دونم به دردت می خوره یا نه ؟
اینم کدش به زبان C




#include <stdio.h>
#include <conio.h>
void main()
{
int x=0;
printf("Enter A Number : ");
scanf("%d",&x);
printf("Ekhtelaf Do Adad Chand Ast ? :");
int ekhtelaf;
scanf("%d",&ekhtelaf);
printf("Adade Dovom Dar Kodam Dahak Ast ?");
int dahak=0;
scanf("%d",&dahak);
dahak--;
for (int i=0;i<=x;i++)
{
for (int j=0;j<=x;j++)
{
if (((i+j)==x) && ((i-j==ekhtelaf)|| (j-i==ekhtelaf)) && j>=dahak*10 && j<=dahak*10+9)
{
printf("( %d , %d )\n",i,j);
}
}
}
getch();
}


رها حل من به این شکل هست که دو سوال بپرسه
سوال اول : اختلاف بین دو عدد چند است؟
سوال دوم : عدد دوم در کدام دهک قرار دارد ؟
در ضمن دهک اول یعنی : 0 تا 9
دهک دوم یعنی : 10 تا 19
...
بقیش رو هم خودت بلدی
یا علی

en.kamali.ir
جمعه 09 اسفند 1387, 19:57 عصر
کد شما رو بررسی میکنم
نتیجه در همین تاپیک اعلام میشود
ممنون

en.kamali.ir
جمعه 09 اسفند 1387, 20:36 عصر
سلام
کد شما رو بررسی کردم یک مشکل داره .
شما سوالی که در مورد اختلاف 2 عدد پرسیده بودید .
سوال شما می بایست دارای شرط زیر باشد :
جواب شما عددی بین 0 تا 9 باشد
سوال دهک که پرسیده بودید این شرط را داراست .
در بعضی موارد که کم هم نیست جواب سوال اختلاف بیش از 0 الی 9 میباشد و گاهی هم 3 رقمی میشود .
ممنونم
اگر من اشتباه کردم لطفا کد خودتون رو تشریح فرمایید تا استفاده کنم در غیر این صورت کد شما استفاده نمیشه و تاپیک همچنان ادامه پیدا خواهد کرد .

Sundown
شنبه 10 اسفند 1387, 03:44 صبح
سلام
من که نفهمیدم منظورتون چیه ؟
ببین برنامه از شما یه عدد میخواد که همون جمع دو عدد انتخاب شده توسط کاربر هست (مثلا 38 )
مثلا فرض کنید ما 10 و 28 رو در نظر گرفته بودیم که جمعشون میشه 38
بعد سیستم از ما میخواد که بگیم اختلاف دو تا عدد انتخابی ما چند است( در مثال اختلاف دو عدد 18 است)

بعد هم سیتم میگه عدد دوم توی کدوم دهک قرار داره
عدد دوم ما یعنی 28 در دهک سوم قرار داره

بعد هم اینتر و به راحتی سیستم جواب رو به ما میگه ( سیستم حتی ترتیب انتخاب ما رو هم میفهمه )
کد هم که این قدر واضح هست که فکر کنم زشت باشه توی این جمع حرفه ای بخوایم توضیح بدیم
مسئله خیلی ساده است نمی دونم چرا این قدر میپیچونیش

en.kamali.ir
شنبه 10 اسفند 1387, 20:55 عصر
ببین برنامه از شما یه عدد میخواد که همون جمع دو عدد انتخاب شده توسط کاربر هست (مثلا
38 )
تا اینجا مشکلی نیست
بعد هم سیتم میگه عدد دوم توی کدوم دهک قرار داره
این هم سواله خوبیه
بعد سیستم از ما میخواد که بگیم اختلاف دو تا عدد انتخابی ما چند است( در مثال اختلاف دو عدد 18 است)
مشکل این سواله جواب شما 18 شد این در حالی است که شما جوابتون یک رقمی و بین صفر تا نه میتونه باشه .ولی جوب شما 2 رقمی است .
بازم ممنونم از توضیحتون .
اگر بازم توضیحی دارید بفرمایید

Sundown
یک شنبه 11 اسفند 1387, 00:43 صبح
مشکل این سواله جواب شما 18 شد این در حالی است که شما جوابتون یک رقمی و بین صفر تا نه میتونه باشه .ولی جوب شما 2 رقمی است .

این رو کی گفته ؟ که جواب باید و باید عددی یک رقمی باشه ؟
وقتی سیستم پرسید اختلاف دو عدد چند است شما هر عددی میتونید وارد کنید (حتی منفی)

دو عدد 15 و 25 رو در نظر بگیر
برنامه رو اجرا کن
توی سوال اول که میگه عددی را وارد کنید بزنید 40 که جمع دو عدد است
توی سوال بعد سیستم میگه اختلاف دو عدد چند است ؟ شما دو تا جواب میتونید برا این سوال داشته باشید یا 10=15-25 و یا 10-=25-15
شما برای اختلاف دو عدد هر دوی این اعداد رو میتونید وارد کنید مثلا بزن10
سوال بعد هم که میگه عدد دوم توی کدوم دهک هست ؟ در این جا عدد دوم ما یعنی 25 توی دهک سوم هست.پس وارد کن سه
بعد سیستم اون دو تا عدد ما یعنی 15 و 25 رو به ما نشون میده

چیزی که باید دقت کنی اینه : برای اختلاف دو عدد لازم نیست که حتما عدد یک رقمی باشه ( البته مگه این که صورت مسئله این رو خواسته باشه)شما هر عددی رو میتونید وارد کنید حتی اعداد منفی!!!

شما این برنامه رو کامپایل کن بعد این طوری که گفتم اعداد رو براش وارد کن خودت می بینی که کاملا درست جواب میده

en.kamali.ir
یک شنبه 11 اسفند 1387, 19:59 عصر
برای اختلاف دو عدد لازم نیست که حتما عدد یک رقمی باشه ( البته مگه این که صورت مسئله این رو خواسته باشه)
دوست عزیز خیلی ممنونم از پیگیریت اما صورت مسئله اینو میخواد و باید سوالهایی که میپرسید رو توی یک بیت خلاصه کنید .اگر در مبنای 2 کار میکنید سوال شما یک بیت که شامله صفر یا یک میشه .اگر در مبنای ده هستید سوال شما باید جوابی بین 0 تا 9 داشته باشه تعداد سوالات هم که مشخصه
بازم ممنونم