PDA

View Full Version : سوال: پیشنهاد الگوریتم برای تغییر برخی از بیت های یک عدد



zahrasaffar
پنج شنبه 11 دی 1393, 14:45 عصر
سلام دوستان . من یک عدد دارم فرض کنید 192 بیتی .مقدار اولیه عدد رو صفر در نظر بگیرید . میخوام به صورت تصادفی مثلا 3 بیت از بیت های اون رو یک کنم . چجوری میتونم این کار رو انجام بدم. به طور مثال در مورد یک عدد ده بیتی :
عدد اولیه : 0000000000
اعداد تصادفی :
1000010001
1010100000
1100000100
...
...
ممنون میشم راهنمایی کنید

rahnema1
پنج شنبه 11 دی 1393, 16:32 عصر
سلام میتونید وکتوری از int درست کنید
هر دفعه که shuffle استفاده می کنید ترتیب اعداد تغییر می کنه

#include <vector>
#include <iostream>
#include <chrono>
#include <algorithm>
using namespace std;
int main()
{
default_random_engine generator( chrono::system_clock::now( ).time_since_epoch( ).count());
vector<int> adad(192);
for (int i = 0; i < 3; i++)
adad[i] = 1;

shuffle (adad.begin(), adad.end(), generator);
for (int i = 0; i < 192; i++)
cout<< adad[i];
cout << endl;
shuffle (adad.begin(), adad.end(), generator);
for (int i = 0; i < 192; i++)
cout<< adad[i];
}

zahrasaffar
پنج شنبه 11 دی 1393, 16:57 عصر
سلام میتونید وکتوری از int درست کنید
هر دفعه که shuffle استفاده می کنید ترتیب اعداد تغییر می کنه

#include <vector>
#include <iostream>
#include <chrono>
#include <algorithm>
using namespace std;
int main()
{
default_random_engine generator( chrono::system_clock::now( ).time_since_epoch( ).count());
vector<int> adad(192);
for (int i = 0; i < 3; i++)
adad[i] = 1;

shuffle (adad.begin(), adad.end(), generator);
for (int i = 0; i < 192; i++)
cout<< adad[i];
cout << endl;
shuffle (adad.begin(), adad.end(), generator);
for (int i = 0; i < 192; i++)
cout<< adad[i];
}

نوع big اندازه عدد من رو ساپورت میکنه و من مشکلی با 192 بیت بودنش ندارم . فقط نمیدونم چجوری به بیت ها دسترسی پیدا کنم . شما مثلا یه عدد int رو در نظر بگیرید که میخواهیم هر بار 3 بیتش رو تصادفی یک کنیم .

rahnema1
پنج شنبه 11 دی 1393, 18:16 عصر
نمیدونم از چه کتبخونه ای استفاده می کنید
اما اگه نوع big از عملگر =& یا >> پشتیابی کنه میتونید اینجور بنویسید

#include <vector>
#include <iostream>
#include <chrono>
#include <algorithm>
using namespace std;
int main()
{
big myadad = 0;
big yek = 1;
default_random_engine generator( chrono::system_clock::now( ).time_since_epoch( ).count());
vector<int> index(192);
for (int i = 0; i < 192; i++)
index[i] = i;

shuffle (index.begin(), index.end(), generator);
for (int i = 0; i < 3; i++)
{

myadad &= yek << index[i];
}

}