RosettaCodeData/Task/Ludic-numbers/C++/ludic-numbers.cpp

82 lines
1.7 KiB
C++

#include <vector>
#include <iostream>
using namespace std;
class ludic
{
public:
void ludicList()
{
_list.push_back( 1 );
vector<int> v;
for( int x = 2; x < 22000; x++ )
v.push_back( x );
while( true )
{
vector<int>::iterator i = v.begin();
int z = *i;
_list.push_back( z );
while( true )
{
i = v.erase( i );
if( distance( i, v.end() ) <= z - 1 ) break;
advance( i, z - 1 );
}
if( v.size() < 1 ) return;
}
}
void show( int s, int e )
{
for( int x = s; x < e; x++ )
cout << _list[x] << " ";
}
void findTriplets( int e )
{
int lu, x = 0;
while( _list[x] < e )
{
lu = _list[x];
if( inList( lu + 2 ) && inList( lu + 6 ) )
cout << "(" << lu << " " << lu + 2 << " " << lu + 6 << ")\n";
x++;
}
}
int count( int e )
{
int x = 0, c = 0;
while( _list[x++] <= 1000 ) c++;
return c;
}
private:
bool inList( int lu )
{
for( int x = 0; x < 250; x++ )
if( _list[x] == lu ) return true;
return false;
}
vector<int> _list;
};
int main( int argc, char* argv[] )
{
ludic l;
l.ludicList();
cout << "first 25 ludic numbers:" << "\n";
l.show( 0, 25 );
cout << "\n\nThere are " << l.count( 1000 ) << " ludic numbers <= 1000" << "\n";
cout << "\n2000 to 2005'th ludic numbers:" << "\n";
l.show( 1999, 2005 );
cout << "\n\nall triplets of ludic numbers < 250:" << "\n";
l.findTriplets( 250 );
cout << "\n\n";
return system( "pause" );
}