/**********************************************************************/ /* インクルードファイル */ /**********************************************************************/ #include #include #include #include /**********************************************************************/ /* プロトタイプ宣言 */ /**********************************************************************/ void main( int, char** ); /* メイン */ void title( void ); /* タイトル表示 */ int ran( int ); /* 乱数発生 */ void wait_for( int ); /* 指定秒間時間待ち */ /**********************************************************************/ /* 定数宣言 */ /**********************************************************************/ /**********************************************************************/ /* グローバル変数 */ /**********************************************************************/ /**********************************************************************/ /* 関数名: void main( argc, argv ) */ /* 機能: メイン関数 */ /* 外部参照: */ /* 入力: int argc : パラメータの数 */ /* char *argv[] : パラメータの文字列の配列 */ /* 戻り値: */ /*--------------------------------------------------------------------*/ /* 備考: */ /**********************************************************************/ void main( argc, argv ) int argc; char *argv[]; { short f; /* デバッグフラグ */ long i, j; /* ループ変数 */ long k; /* 答え */ long l; /* ユーザ入力用 */ long m; /* 桁数 */ long n; /* 回数 */ long ihit, iblo; /* 変数 */ char a[80]; /* 答え */ char b[80]; /* ユーザ入力用 */ title(); ran( -1 ); /* 数を初期化 */ for( i = 1; i < 10; i++ ) a[i] = i; /* 1〜9をランダムに並べる */ for( i = 1; i < 10; i++ ) { j = ran( 9 ) + 1; k = a[i]; a[i] = a[j]; a[j] = k; } /* 数字として生成 */ k = 0; for( i = 1; i < 10; i++ ) k = 10 * k + a[i]; n = 0; while( k != 123456789 ) { printf("\nNumber = %ld : reverse ?", k ); gets( b ); l = atol( b ); if( l <= 0 ) { printf("Give Up!!! \n"); exit(1); } if( l < 10 ) { n++; for( i = 1; i <= l / 2; i++ ) { j = a[10-i]; a[10-i] = a[9-l+i]; a[9-l+i] = j; } k = 0; for( i = 1; i < 10; i++ ) k = 10 * k + a[i]; } else printf(" Input error!"); } printf("\nNumber = %ld : Try = %ld", k, n ); if( n < 5 ) printf(" You are Super Star!!"); else if( n < 10 ) printf(" You are Greatest Gamer!"); else if( n > 15 ) printf(" You are NOT gamer."); printf("\n"); } /**********************************************************************/ /* 関数名: void title( void ) */ /* 機能: タイトルを表示する */ /* 外部参照: */ /* 入力: */ /* 戻り値: */ /*--------------------------------------------------------------------*/ /* 備考: */ /**********************************************************************/ void title( void ) { printf("数字並べ替えゲーム Version 0.20 (C) 1997 K.Ueno \n\n"); printf("$ reverse \n"); printf(" 表示された数の下n桁を回転させて"); printf("123456789 と並べ替えるゲーム\n"); printf(" 少ない回数で並べ替えるとOK!\n"); printf(" さぁれっつとらい!\n\n"); } /**********************************************************************/ /* 関数名: int ran( max ) */ /* 機能: 一様乱数を発生させる */ /* (max > 0) の場合の乱数発生範囲は 0〜(max-1) まで */ /* (max <= 0) の場合には内部変数を初期化する */ /* 外部参照: */ /* 入力: int max : 乱数発生範囲 */ /* 戻り値: int : 乱数 */ /*--------------------------------------------------------------------*/ /* 備考: 乱数の計算式は次の通り */ /* 16bit : R(n+1) = 12869 * R(n) + 6925 */ /* 32bit : R(n+1) = 843314861 * R(n) + 453816693 */ /**********************************************************************/ int ran( max ) int max; { static long r; if( max < 0 ) { time( &r ); r = r & 0x7fff; max = -max; } else if( max == 0 ) { r = 0; } r = (12869 * r + 6925) & 0x7fff; return( (int)((max * r) >> 15) ); } /**********************************************************************/ /* 関数名: void wait_for( isec ) */ /* 機能: 指定された秒数分だけウェイトする */ /* 外部参照: */ /* 入力: int isec : 指定時間 */ /* 戻り値: */ /*--------------------------------------------------------------------*/ /* 備考: */ /**********************************************************************/ void wait_for( isec ) int isec; { long v, t1, t2; time( &t2 ); for( v = 1; v <= isec; v++ ) { t1 = t2; while( t1 == t2 ) time( &t2 ); } } /* ========================== END OF FILE =========================== */