java初心者です。
学校で数独を解けという問題が出て、問題の意味もまったくわからないのでヒントください。
問題
数独を解くプログラムを作成せよ。ただし、すでに埋まっているマスを入力する時にはi,j,n(改行)でひとつの数字を入力できるものとし、終了条件は、0,0,0を入力するとする。
問題用紙には1問だけ数独が載ってあるのですが、
初歩的な質問で申し訳ありませんが
まずこのプログラムは、その1問だけ載っているマスが少し埋まっているプログラムを打ち込んでから解くプログラムを考えるのでしょうか?
普通、数独を解くプログラムとは、空いているマスにキーボード入力して、解くのでしょうか?それとも自動に動いて解くのでしょうか?
はじめにプログラムをコンパイルしたときにどう言葉が出るようにすればようのでしょうか?
終了条件0,0,0とは、000を入力したら終わる?ということでしょうか?
マスを作って、クリックすると数字が…というようなjavaは習ってなくコマンドプロントでコンパイルだけなので、数字を打って入力、エンターというだけで解くのだと思うのですが、まったくわからないです。
根本的にわからなくてすいません。
ぜひご回答よろしくおねがいします。
No.1ベストアンサー
- 回答日時:
問題の解決策をソースコードをまじえて解説します。
なお、ソースコードは即興で書いたものなので、
とても汚いですが、勘弁ください。
一般的に数独はマスを全部埋めてから答え合わせするわけですね。
なので、i(入力したいマスの縦の位置),j(入力したいマスの横の位置),
n(入力したい数字)でエンターキーでマスに数字を入れていきます。
↓
マスの中の数字 int[][] num=new int[9][9];
正解判定のために boolean clear=true;
9*9マスを3*3のブロックを縦に並び替え
9個分縦に並べた配列に変換したあとの配列
int[][] sort=new int[9][9];
System.out.println(変更したいマスの縦座標を入力してください);
iに入力させた数字を代入
System.out.println(変更したいマスの横座標を入力してください);
iに入力させた数字を代入
System.out.println(変更後の数字を入力してください);
nにさせた数字を代入
num[i][j]=n;
これを0,0,0と入力するまで繰り返させる(while文)
そして、最後に正解の判定
boolean clear=true;
//横の列の数字にかぶってるものがないか
for(int i=0;i<9;i++){
for(int a=0;a<8;a++){
for(int b=a+1;b<9;b++){
//かぶってたらfalse
if(num[i][a]!=num[i][b]){
clrea=false;
}
}
}
}
//縦の列にかぶってる数字がないか
for(int j=0;j<9;j++){
for(int a=0;a<8;a++){
for(int b=a+1;b<9;b++){
//かぶってたらfalse
if(num[a][j]!=num[b][j]){
clrea=false;
}
}
}
}
//配列の並び替え
int count=0;//配列sortの縦座標
for(int bx=0;bx<3;bx++){
for(int by=0;by<3;by++){
for(int i=bx*3;i<bx*3+3;i++){
for(int j=by*3;j<by*3+3;j++){
sort[bx*3+by][count[i][j];
count++;
}
}
count=0;
}
}
}
次にsortの縦横にかぶってる数字がないか
上記のnumをsortに変えればできるのでソースコードは
省略します。
最後に結果の出力を
if(clear==true){
System.out.println("正解");
}else{
System.out.println("不正解");
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- デスクトップパソコン 認証コードが入力できない(同じ数字が次のマスにも勝手に入力される) 8 2023/01/27 12:53
- その他(プログラミング・Web制作) Python3プログラムについて 4 2023/05/21 14:55
- Java Java 年数計算 3 2023/01/28 10:52
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Java java 入力された文字列を数値に置き換えて整数にし、計算をしたいです。 <を10として /を1とし 4 2022/05/16 21:08
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java Java、配列の問題を教えて欲しいです。 ・日、月、火、水、木、金、土 ・各曜日の英語 を2次元配列 2 2023/07/10 19:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
C#の質問
-
学校で課題を出されて困ってい...
-
Java 入力した整数値の合計を、...
-
javaで数独を解くプログラムに...
-
階乗の式
-
論理演算子”||”またはの入力方法
-
入力データ数を入力して、その...
-
テキストボックスに入力された...
-
javaです。 途中まで出来ている...
-
Java 配列<選挙>
-
Java、2の0乗~10乗の表示
-
キーボードから10人分の点数を...
-
点数をだす時に、maxとminがお...
-
C言語のポインターに関する警告
-
パソコンキーボードで時分秒を...
-
Java配列でNullPointerExceptio...
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
java キーボード入力された値の...
-
テキストボックスに入力された...
-
論理演算子”||”またはの入力方法
-
総称型ArrayList<E>への参照...
-
7つ数字を表示したら改行すると...
-
Ctrl+Zが入力されると終了する...
-
countに実行した回数をいれたい...
-
Java、2の0乗~10乗の表示
-
キーボードから10人分の点数を...
-
Randomメソッドの確率設定
-
数値⇒漢数字変換 java
-
コマンドライン引数の例外処理...
-
Java 入力した整数値の合計を、...
-
javaのエラーが回収できない
-
2つのスクロールバーを連動させ...
-
階乗の式
-
C#の質問
-
Java キーボードから負の数が入...
おすすめ情報