dポイントプレゼントキャンペーン実施中!

数独の盤面上に、数字が0から9まであり、その数がそれぞれ何個あるのか数える
プログラムを書きました。(0というのは、まだマス目がうまってない状態を指します)

以下のプログラムでは、ある座標に着目し、その座標が関連する行・列・ブロックに
数字が何個あるか数えています。(0のマスの数は特に気にしていません)

final int x0 = x / 3 * 3; //000 333 666
final int y0 = y / 3 * 3;

//その座標が関連するブロック、行、列に存在する値の数を数える
//行
for( int i=0; i<9; ++i ){
countNum[state.getNum(i, y)]++; //state.getNum座標の数字を取得しています。
}
//列
for( int i=0; i<9; ++i ){
countNum[state.getNum(x, i)]++;
}
//ブロック
   for(int i=x0;i<3;i++){
   for(int j=y0;j<3;j++){
    if( i!=x || j!=y){
countNum[state.getNum(i, j)]++;
   }
   }

これで、1の数字の個数や、2の数字の個数を求めることができました。

そして、個数の少ない順に並び替えたいのですが、並び替えてしまうと
何の数字が何個なのかわからなくなってしまいます。

どのようにすれば、数字とその個数がわかったまま並び替えをおこなえますか?
配列を二つ準備するべきなのでしょうか?

順番の入った配列と個数の入った配列。というように。

A 回答 (2件)

2つの配列を使うのが簡単でいいんじゃないかな.

    • good
    • 0
この回答へのお礼

ありがとうございます!

そうですね!ちょっと考えてみます。

お礼日時:2011/01/21 12:39

こんばんは。



ん?
hashじゃダメなん???
順番がキー、値が個数。
ソートはcomparatorを自作・・・。
    • good
    • 0
この回答へのお礼

ありがとうございます。
hashですね。
なるほど。

実行速度が遅くなるかなぁとか思っていました。
androidアプリを開発していまして。

お礼日時:2011/01/21 12:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!