新浪博客

一个很有趣的算法:利用N-进制数,控制组合的生成

2024-11-13 19:08阅读:
【问题】1个9位数,每一位都是[2,3,5,7]中的一个数组成,典型如: 22222 3333
23235 7777
下面这个数则是不符合的反例:
22222 7789
因为8,9不在[2,3,5,7]中。
请问,如果把这些数都排列出来,第123个数是什么?生成此前的所有数
【解】每一位都有4种可能,则所有的数的取值序号,可以看成是一个四进制的数
如四进制数: 0 0 0 0, 代表了 2 2 2 2
1 0 2 3, 代表了 3 2 5 7
#include
#include
using namespace std;
int main()
{
int pos = 122; //因为从0开始
int dataset[]={2,3,5,7};

for(int i = 0; i < 4*4*4*4; ++i)
{
if(pos == 123)
return 0;
int data = i;
int pos[4];
for(int j = 0; j < 4; ++j)
{
int digit = data % 4;
data = data / 4;
pos[j] = digit;
}
// 输出
int sum = 0;
for(int i = 4; i>=0; --i)
{
sum = sum * 10 + dataset[pos[i]];
}
cout<<sum<<endl;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
输出如下:
22222 22223 22225 22227 22232 22233 22235 22237 22252 22253 22255 22257 22272 22273 22275 22277 22322 22323 22325 22327 22332 22333 22335 22337 22352 22353 22355 22357 22372 22373 22375 22377 22522 22523 22525 22527 22532 22533 22535 22537 22552 22553 22555 22557 22572 22573 22575 22577 22722 22723 22725 22727 22732 22733 22735 22737 22752 22753 22755 22757 22772 22773 22775 22777 23222 23223 23225 23227 23232 23233 23235 23237 23252 23253 23255 23257 23272 23273 23275 23277 23322 23323 23325 23327 23332 23333 23335 23337 23352 23353 23355 23357 23372 23373 23375 23377 23522 23523 23525 23527 23532 23533 23535 23537 23552 23553 23555 23557 23572 23573 23575 23577 23722 23723 23725 23727 23732 23733 23735 23737 23752 23753 23755 23757 23772 23773 23775 23777 25222 25223 25225 25227 25232 25233 25235 25237 25252 25253 25255 25257 25272 25273 25275 25277 25322 25323 25325 25327 25332 25333 25335 25337 25352 25353 25355 25357 25372 25373 25375 25377 25522 25523 25525 25527 25532 25533 25535 25537 25552 25553 25555 25557 25572 25573 25575 25577 25722 25723 25725 25727 25732 25733 25735 25737 25752 25753 25755 25757 25772 25773 25775 25777 27222 27223 27225 27227 27232 27233 27235 27237 27252 27253 27255 27257 27272 27273 27275 27277 27322 27323 27325 27327 27332 27333 27335 27337 27352 27353 27355 27357 27372 27373 27375 27377 27522 27523 27525 27527 27532 27533 27535 27537 27552 27553 27555 27557 27572 27573 27575 27577 27722 27723 27725 27727 27732 27733 27735 27737 27752 27753 27755 27757 27772 27773 27775 27777

我的更多文章

下载客户端阅读体验更佳

APP专享