تالار گفتمان مانشت
الگوریتم کدهای ده دهی - نسخه‌ی قابل چاپ

صفحه‌ها: ۱ ۲
الگوریتم کدهای ده دهی - روفی - ۱۰ آذر ۱۳۹۱ ۰۵:۲۶ ب.ظ

سلام!Smile
میشه تو این سوال کمکم کنید؟Huh
الگوریتمی بنویسید که تمام کدهای ده دهی که شامل ۰و۱۱و۱۲و۲۱و۲۲ نیست؟؟
(یه فایلی رو هم پیوست کردمSmile )

ببخشد شامل اون اعداد نیس رو تولیــــــــــــــــــــــــــــــــد کند!

الگوریتم کدهای ده دهی - روفی - ۱۱ آذر ۱۳۹۱ ۰۲:۰۵ ب.ظ

کســـــــــــــــــــــــــــــــــــــــــــــــــــــــــی ایـــــــــــــــنجـــــــــــــــــــــــــــــــــــــــا نـــــــــــــــــــــــــــــــــــــیست؟

الگوریتم کدهای ده دهی - a.hooshmand - 11 آذر ۱۳۹۱ ۰۲:۳۷ ب.ظ

کد:
c(n)
{
    for (k=0;k<=n;k++)
        for (i=10^k-1;i<10^(k+1)-1;i++)
            if ({۰و۱۱و۱۲و۲۱و۲۲}  not in i)  cout <<i;
}


Big GrinBig GrinBig Grin

RE: الگوریتم کدهای ده دهی - javadem - 11 آذر ۱۳۹۱ ۰۳:۳۲ ب.ظ

اینم یه جواب دیگه واسه این الگوریتم که بازگشتیه!
[tex]C(int n,int x ,int y )\{[/tex]
[tex]if (n = =0) cout << x[/tex]

[tex]if (n > 0)\{[/tex]
[tex]for(int i = 1;i<= 9;i )\{[/tex]
[tex]if (y < 2\_ \&\&\_ i > 2)C( n - 1, x * 10 i, i)[/tex]
[tex]if (y > 2) C( n - 1, x * 10 i, i)[/tex]
[tex]\}[/tex]
[tex]\}[/tex]
[tex]\}[/tex]

که x مقدار جاری را نگه میدارد!
و y عدد تولید شده قبلی برای حفظ درستی الگوریتم!
این الگوریتم باید با مقداری مثل [tex]C(num,0,9)[/tex] فراخوانی کنیم که num تعداد ارقام میباشد!
این الگوریتم اینطور کار میکنه که در هر مرحله اگر شکل صحیح جواب حفظ شود ادامه میده در غیر اینصورت مقدار بعدی را چک میکند!
البته ممکنه از لحاظ Syntax مشکل داشته باشه اما از لحاظ الگوریتمی مطمئن هست!

الگوریتم کدهای ده دهی - روفی - ۱۱ آذر ۱۳۹۱ ۰۳:۵۴ ب.ظ

وای خدا !!!
مرسی مرسی مرسی !
واقعا متشکرم ازتون!
پر رو شدم!!!
میشه تو اینم کمکم کنید؟

"الگوریتمی بنویسید که تمام کدهای با ارقام ۰ و۱و۲ ک شامل دو صفر کنار هم یا دو یک کنار هم نباشد را تولید کند!"

بازم ممنونم ازتون!

الگوریتم کدهای ده دهی - a.hooshmand - 11 آذر ۱۳۹۱ ۰۵:۵۴ ب.ظ

چون عشق بازگشت پذیر هستید!!!

کد:
C (n,z=-1)  //*note1
{
    If  n=1   then   cout <<{0,1,2} –{z} //**note2
    If n>1 then
    {
        Cout  << 0c(n-1,0)    
        Cout  << 1c(n-1,1)    
        Cout  << 2c(n-1)    
    }
}

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

//**note2
//{۰,۱,۲}-{z} معنی آن این هست که اعداد مجموعه به جز z را چاپ کن
کد:
for {i=0;i<3;i++)
    if (i!=z) then cout <<i;






راستی این در کد اول شما یعنی چی؟
کد:
cout <<0,1
...
Cout  << 1c(n-1)


الگوریتم اول خودتان را با زبان سی پلاس پلاس می توانید پیاده سازی کنید؟
مخصوصا ترکیب شدن این cout ها را!!!Tongue
Big GrinBig GrinBig Grin

الگوریتم کدهای ده دهی - روفی - ۱۱ آذر ۱۳۹۱ ۰۶:۲۷ ب.ظ

پیاده سازیشو بلد نیستم ولی ازین ایده استفاده کرده بودم برا نوشتنش!
اینو یه نگاه بندازید بیزحمت!
Shy

ببخشید!
من تازه شرو کردم به بررسی جواب ها !
متاسفانه اولین جوابی که برام نوشتید رو متوجه نمیشم!
اگ اگ اگ اگ اگ اگ براتون امکانش هست یه توضیح کوچولو هم بدید!

الگوریتم کدهای ده دهی - a.hooshmand - 11 آذر ۱۳۹۱ ۰۷:۱۳ ب.ظ

الگوریتم اول
برای ساخت عدد n رقمی از به توان رساندن ۱۰ به قوه nاستفاده می کند
مثلا ۲ رقمی :
i از ۱۰ تا ۹۹ شمارش می کند به شرطی که ترکیبهایی که قرار نیست چاپ شوند در عدد وجود نداشت عدد را چاپ می کند.
////////////////////
الگوریتم دوم
اگه n یک بود اعداد ۰ تا ۲ چاپ می کند
اگه n بیشتر از یک بود اعداد ۰ تا ۲ را اول چاپ می کند و در ادامه تابع را با یکی کمتر (و اطلاع به تابع که رقم قبلی صفر یا یک بوده که دوباره تابع پشت سر هم چاپ نکند) صدا می زند.




در cout های تو در توی برای پیاده سازیش که شکل خروجی آن طوری شود که انتظار دارید شایید از کل الگوریتم شما مشکل تر شود


۱ c(3)==1111و۱۱۰۰و۱۱۰۱و۱۱۱۰و۱۰۱۱و۱۰۱۰و۱۰۰۱


۱c(3) را بسط بدید که یک ها سر جای خود باشند

اگه مستقیم چاپ کنید احتمالا شما بایید به جلو و عقب خط بروید و کارکترها را جابه جا کنید که به محل مناسب چاپ برسید. (پیاده سازی این کار خودش می تواند قصه ای باشدBig GrinBig GrinBig GrinTongue)

الگوریتم کدهای ده دهی - روفی - ۱۱ آذر ۱۳۹۱ ۰۷:۲۶ ب.ظ

الان تو دلتون میگید این دختر عجب گـــــــــــــــــــــیریه هااااااااااااBig Grin
این سوال آخرمه به جون روفی! Shy
ایشالا یه جوری جبران کنم هرچند شما نیاز ندارید به کمک کسی!

"الگوریتمی بنویسید که تمام عدد هایی که فاقد الگوی ۱۱ هستن را تولید کند!"

الگوریتم کدهای ده دهی - a.hooshmand - 11 آذر ۱۳۹۱ ۰۷:۳۴ ب.ظ

(۱۱ آذر ۱۳۹۱ ۰۷:۲۶ ب.ظ)روفی نوشته شده توسط:  الگوریتمی بنویسید که تمام عدد هایی که فاقد الگوی ۱۱ هستن را تولید کند!"
همون الگوریتم اولی را که نوشتم را این جوریش کن

کد:
if ({11}  not in i)  cout <<i;






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

الگوریتم اول را خودتان نوشتید یا استادتان؟

الگوریتم کدهای ده دهی - روفی - ۱۱ آذر ۱۳۹۱ ۰۷:۳۹ ب.ظ

اولی رو فقط تونستم خودم بنویسم که به استاد نشون دادم گف قابل قبوله!

یک دنیــــــــــــــــــــــــــا ممنونم ازتون!

الگوریتم کدهای ده دهی - a.hooshmand - 11 آذر ۱۳۹۱ ۰۷:۴۸ ب.ظ

(۱۱ آذر ۱۳۹۱ ۰۷:۳۴ ب.ظ)a.hooshmand نوشته شده توسط:  الگوریتمی بنویسید که تمام عدد هایی که فاقد الگوی ۱۱ هستن را تولید کند!"
یا با تغییر برنامه دوم.
کد:
C (n,flag=false)  
{
     If  n=1   then  
        for (i=0;i<10;i++)
            if ((flag)&&(i!=1)) cout <<i;
            
     If (n>1) then
    {
        for (i=0;i<10;i++)
            if (i!=1)
                Cout  << ic(n-1,false)
            else
                Cout  << ic(n-1,true);
          
     }
}


الگوریتم کدهای ده دهی - روفی - ۱۱ آذر ۱۳۹۱ ۰۸:۳۵ ب.ظ

جسارت نباشه !
این الگوریتم فک میکنم که مثلا تو اعداد دو رقمی اعدادی که یکانشون ۱ باشه رو کلا تولید نمیکنه!
در صورتی ک من مشکلم از بین اعداد دو رقمی فقط ۱۱ است!

الگوریتم کدهای ده دهی - javadem - 11 آذر ۱۳۹۱ ۰۸:۴۷ ب.ظ

ببینید راه حل بهتر اینطور مسائل اینه همیشه آخرین عدد اضافه شده رو در حافظه نگه دارید البته اگر فرض نبودن یک عدد ۲ رقمی در تولیدات باشد(اگر فرض عدد n رقمی باشه باید n-1 رقم رو در حافظه نگه دارید). و در هر مرحله اگر با توجه به عددی که در حافظه است رشته تولید شده صحیح بود ادامه میدیم. در غیر این صورت باید حالت دیگه ای رو چک کنیم!
حالا با این روش حل سوال آخرتونو مینویسم که روش جا بیوفته!



تمام رشته هایی که فاقد ۱۱ باشند.
برای این کار همیشه رقم قبلی که به رشته اضافه شده رو نگه میداریم و حالا اگر ۱ بود دیگه ۱ نمیتونیم اضافه کنیم اما اگر غیر ۱ بود هر یک از ۹ رقم رو میتونیم اضافه کنیم و n رو یک واحد کاهش میدیم.
وقتی که n==0 بشه رشته یک رشته پذیرفته شده است و باید چاپ بشه!
[tex]C(int\ n,int\ x ,int\ y )\{[/tex]
[tex]if (n = =0) cout << x[/tex]

[tex]if (n > 0)\{[/tex]
[tex]for(int\ i = 0;i<= 9;i )\{[/tex]
[tex]if (y == 1\ \&\&\ i !=1)C( n - 1, x * 10 i, i)[/tex]
[tex]if (y !=1) C( n - 1, x * 10 i, i)[/tex]
[tex]\}[/tex]
[tex]\}[/tex]
[tex]\}[/tex]

اینم باید به صورت [tex]C(num,0 ,9 )\{[/tex] (یعنی یه حالت امن) فراخوانی اولیه کنیم!

الگوریتم کدهای ده دهی - a.hooshmand - 11 آذر ۱۳۹۱ ۰۸:۵۲ ب.ظ

(۱۱ آذر ۱۳۹۱ ۰۸:۳۵ ب.ظ)روفی نوشته شده توسط:  این الگوریتم فک میکنم که مثلا تو اعداد دو رقمی اعدادی که یکانشون ۱ باشه رو کلا تولید نمیکنه!
در صورتی ک من مشکلم از بین اعداد دو رقمی فقط ۱۱ است!

if ((flag)&&(i!=1)) cout <<i;
این flag برای همین هست