#include #include using namespace std; #pragma warning( disable: 4996 ) #pragma warning( error: 4717 ) template< class T > T Max( T a, T b ) { return a > b ? a : b; } template< class T > void SwapValues( T& a, T& b ) { T temp( a ); a = b; b = temp; } static const int MAX_SIZE = 1000000; int maxCycles[ MAX_SIZE + 1 ]; int SequenceLength( unsigned int val ) { if ( val == 1 ) { return 1; } val = val % 2 != 0 ? val * 3 + 1 : val / 2; return SequenceLength( val ) + 1; } int main( int argc, char* argv[] ) { #if 0 vector< int > values; for ( int i = 1; i < MAX_SIZE + 1; i++ ) { int maxCycle = SequenceLength( i ); if ( values.size() <= maxCycle ) { values.resize( maxCycle + 1, 0 ); } values[ maxCycle ]++; } FILE* f = fopen( "histogram.csv", "w" ); if ( f == NULL ) { return 0; } for ( int i = 0; i < values.size(); i++ ) { fprintf( f, "%i,%i\n", i, values[ i ] ); } fclose( f ); #else vector< int > values; values.resize( 10, 0 ); for ( int i = 1; i < MAX_SIZE + 1; i++ ) { int maxCycle = SequenceLength( i ); char num[ 50 ]; itoa( maxCycle, num, 10 ); int index = 0; while ( num[ index ] != '\0' ) { values[ num[ index++ ] - '0' ]++; } } FILE* f = fopen( "histogram_digits.csv", "w" ); if ( f == NULL ) { return 0; } for ( int i = 0; i < values.size(); i++ ) { fprintf( f, "%i,%i\n", i, values[ i ] ); } fclose( f ); #endif return 0; }