PDA

View Full Version : سوال: سوال الگوریتمی



bmd007
جمعه 11 بهمن 1392, 10:02 صبح
سلام دوستان و اساتید
چطوری میشه یه برنامه نوشت که
مثلا یه رشته داریم abc
برنامه تمام کلماتی که میشه با abc ساخت رو چاپ کنه
یعنی:
abc
acb
bca
bac
cab
cba
در واقع جایگشت حروف(شایدم ترکیب درست یادم نیست)
لطفا جواب بدین خیلی فکر کردم متوجه نشدم

Behnam.B
جمعه 11 بهمن 1392, 14:42 عصر
سلام.
اصلا تابع داریم!
next_permutation(s.begin(), s.end())
این تابع خود s رو تغییر میده و جایگشت بعدی با کاراکتر های s رو میسازه
یه خروجی boolean هم داره: وقتی کاراکتر های رشته به صورت صعودی مرتب شد، false برمیگردونه...

bmd007
جمعه 11 بهمن 1392, 15:37 عصر
ممنون ولی این تو چه کتاب خونه ای می باشد؟
و اینکه ایا اون s که فرمودین همین رشته ی ورودی است؟
و آیا s.beginمساوی است با
[s[0

Behnam.B
جمعه 11 بهمن 1392, 20:21 عصر
ببخشید که من فراموش کردم اسم کتابخونه رو بگم: کتابخونه algorithm
بله s اینجا از نوع string هست و همون رشته ورودیه
ولی ()s.begin همون [s[0 نیست! خروجیش یه iterator به اول رشته اس و با اون فرق داره،
مثلا iterator میتونه برای پیمایش روی رشته اینجوری استفاده بشه:

string str("Hello World");
for (string::iterator it = str.begin(); it != str.end(); ++it)
cout << *it;
cout << endl;

amirhossein.ha
جمعه 11 بهمن 1392, 23:15 عصر
فقط اگه بخواید از این تابع استفاده کنید باید قبلش اون ارایه یا string یا هر چیز دیگه ای رو sort کنید مثله این :‌


#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
string s; cin>>s;
sort(s.begin(),s.end());
do
{
for(int i=0;i<s.size();i++)
cout<<s[i];
cout<<'\n';
} while (next_permutation(s.begin(),s.end()));
return 0;
}

Behnam.B
شنبه 12 بهمن 1392, 21:39 عصر
بله دقیقا.
و یا روش بد تر(!!!) اینه که در یک حلقه for تعداد دفعات چاپ را بشمارید که n فاکتوریل بشه. (n تعداد کاراکتر های رشته)