かだいのこーど
問題文が意味不明だったけど、とりあえず書いた。
無駄にClassとか宣言しちゃって、いらないメモリを使ってる。
[0,4]区間の乱数を200個つくって、一番近い格子点を求めて、行列で統計を表示
今回はちゃんとSeedを設定しました*1。
using System; namespace SimPysics3 { public class dPoint { public dPoint( double x, double y ) { this.x = x; this.y = y; } public double x { get; set; } public double y { get; set; } } public class iPoint { public iPoint( int x, int y ) { this.x = x; this.y = y; } public int x { get; set; } public int y { get; set; } } class MainClass { private static dPoint[] Calc() { const int RANDOM_MAX = 21478643; double x, y; dPoint[] points = new dPoint[200]; const int Seed = 503; Random rand = new Random( Seed ); int i = 0; while ( true ) { x = ( double )( 1.0 / ( RANDOM_MAX + 1.0 ) * rand.Next( 0, 400000000 ) ); y = ( double )( 1.0 / ( RANDOM_MAX + 1.0 ) * rand.Next( 0, 400000000 ) ); if ( ( 0.0 <= x ) && ( x <= 4.0 ) ) { if ( ( 0.0 <= y ) && ( y <= 4.0 ) ) { points[i] = new dPoint( x, y ); i++; if ( i == 200 ) break; } } } return points; } private static int ToNearest( double value ) { double upper = Math.Abs( ( ( int )value ) + 1 - value ); double lower = Math.Abs( ( ( int )value ) - value ); int val = 0; if ( upper > lower ) { val = Math.Abs( ( int )value ); } else if ( upper < lower ) { val = Math.Abs( ( int )value + 1 ); } else { val = ( int )value; } return val; } private static iPoint[] GetNearestPoint( dPoint[] dPoints ) { iPoint[] iPoints = new iPoint[dPoints.Length]; iPoint neo; for ( int i = 0; i < dPoints.Length; i++ ) { neo = new iPoint( ToNearest( dPoints[i].x ), ToNearest( dPoints[i].y ) ); iPoints[i] = neo; } return iPoints; } private static int[,] ToMatrix( iPoint[] iPoints ) { int[,] Koushi = new int[5, 5]; for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 5; j++ ) Koushi[i, j] = 0; for ( int i = 0; i < iPoints.Length; i++ ) Koushi[iPoints[i].x, iPoints[i].y]++; return Koushi; } public static void Main( string[] args ) { dPoint[] dPoints = Calc(); iPoint[] iPoints = GetNearestPoint( dPoints ); int[,] matrix = ToMatrix( iPoints ); for ( int i = 0; i < 5; i++ ) { for ( int j = 0; j < 5; j++ ) { Console.Write( string.Format( "{0}\t", matrix[j, i].ToString() ) ); } Console.WriteLine(); } Console.ReadKey(); } } }
実行結果
3 4 4 2 2 6 13 10 11 10 6 15 11 13 11 7 6 17 18 2 2 6 9 9 3
*1:前回Seedを設定しなかったのはマイナス1点でした