teratail header banner
teratail header banner
質問するログイン新規登録
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

1回答

594閲覧

8-Queen 8クイーン 8Queen 8queen

ZhenZeZhang

総合スコア33

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/11/29 06:00

0

0

前提・実現したいこと

C language (Only using Function & Array & without pointer)
8queen 問題 について
Question about 8-Queen

発生している問題・エラーメッセージ

4*4 ができましたが、それからN*Nのプログラムを作成していくのですが、今までのやり方であると非常に長たらしいプログラムになるのでループを短縮するための自作関数のアイデアがほしい。

I have finished making 44 but can't do NN by using the same way. I would appreciate that someone that can help me make a selfmade-function to figure this out.( without using pointer & using only One-dimensional array)

該当のソースコード

#include<stdio.h>

int main(void)
{
int a[4], i, j, k, l;

// printf("How Many?==>>(>=4)");
// scanf("%d", &n);

// for(i=0; i<n; i++)
// {
// scanf("%d", a[i]);
// }
printf("ok0 \n");

for(i=0; i<4; i++) { a[0]= i; for(j=0; j<4; j++) { a[1]= j; if( (i-j)*(i-j) != 1 || i - j ==0) { for(k=0; k<4; k++) { a[2]= k; if( (j-k)*(j-k) != 1 || j-k ==0) { for(l=0; l<4; l++) { a[3]= l; if( (k-l)*(k-l) != 1 || k-l ==0) { if( i != j && i != k && i != l && j != k && j != l && k != l) { printf(" %d %d %d %d\n",i, j, k, l); n++ } } } } } } } } printf(" Total => %d <=", n); return 0;

}### 試したこと

変数が同じ出ないことのIFと斜めは変数i-jの二乗が1でないIFを利用した。

int i, j;
By using ( i != j && i != k && i != l && j != k && j != l && k != l)
and (i-j)*(i-j) != 1

補足情報(FW/ツールのバージョンなど)

多次元配列ポインターを使わずに解決する方法が欲しいです。
It would best to solve this issue without using Multi-dimensional array & pointer.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ちょっと古い記事ですが、参考に成るかと・・・
参考:8 queen

投稿2018/11/29 06:13

編集2018/11/29 06:21
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ZhenZeZhang

2018/11/30 11:34

親切に回答してくださたってありがとうございます!ですが、私はすでにそのサイトを参考にしていましてその内容がなかなか自分に理解ができなく、望んでいるプログラムを作ろことができない状態です。
ZhenZeZhang

2018/11/30 11:41

自分はまだまだの初心者でまだ知識は浅いですので、バックトラック法をうまく操ることができないくてプログラムの概形がつかめなく苦戦中です。(汗) 現在は斜めと横の重ねることのないように2つの配列を作りそれを比べるプログラムを考えてます。そこで自作関数を1つで作ってみようと思って今うす。(二個目の自作関数は作成するかどうかを考えています。最後には18桁ぐらいまで出来る(極めた)プログラムを作る予定です。)
ZhenZeZhang

2018/11/30 12:15

そのページの内容を解読続けてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問