アプリ版:「スタンプのみでお礼する」機能のリリースについて

3×3のラテン方陣をつくるプログラムを作成したのですが、(↓)

#include <stdio.h>
int main(){
int j,k,n = 3;
int a,b,c;
int d,e;
printf("a,b,cの入力:\n");
scanf("%d%d%d",&a,&b,&c);
for(j=0; j<=n-1; j++){
for(k=0; k<=n-1; k++){
d = a * j + b * k + c;
e=d%n;
printf("%d ",e);
}
printf("\n");
}
return 0;
}

実行すると時々値が変わってしまいます。
(その都度ちゃんとコンパイルし直して実行しています。)
たとえば(a,b,c)=(1,1,1)の時に
1 2 0
2 0 1
0 1 2
と出たり
1 1 1
2 2 2
0 0 0
と出たりします。(手計算だと前者が合ってる…?)
これは答えは何通りもある、どちらも正しい、ということでしょうか、、?

後者も合っているとしたら、どのような計算でこのような結果になったのでしょうか?そもそもこれはラテン方陣ではないのでは、、(>_<)
合っていないとしたら、何らかのエラーでしょうか…?

実行した写真も載せようと思うのですが、反映に時間がかかるとの事で、補足の方に載せようと思います。

正直ラテン方陣に関してもプログラミングに関してもまだ全然分かっておらず、このような理解の乏しい質問をしてしまい本当に申し訳ないです、、どなたか教えて下さる人がいると幸いです。。

質問者からの補足コメント

  • これです。

    「3×3のラテン方陣をつくるプログラムを作」の補足画像1
      補足日時:2023/07/10 01:58

A 回答 (5件)

「3×3のラテン方陣をつくるプログラムを作」の回答画像5
    • good
    • 0

3×3のラテン方陣のサンプルです。


#include <stdio.h>
int main()
{
int j,k, n = 3;
int a, b, c;
int v[3];
int x,e;
printf("a,b,cの入力:\n");
scanf("%d,%d,%d", &a, &b, &c);
printf("a=%d b=%d c=%d\n",a,b,c);
v[0] = a;
v[1] = b;
v[2] = c;
for (j = 0; j <= n - 1; j++) {
x = j;
for (k = 0; k <= n - 1; k++) {
e = v[x];
printf("%d ", e);
x++;
if (x >= n) x = 0;
}
printf("\n");
}
return 0;
}
    • good
    • 0

>2.a,b,cは同じ値をいれては、いけません。


>▶︎これはラテン方陣の決まりか何かでしょうか?


https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%86 …

上記URLのラテン方陣の説明と例が書いてあります。
a,b,cは全て異なるあたいでなければいけません。
    • good
    • 0

No1です。


カンマ区切りで入力したい場合は、
scanf("%d,%d,%d", &a, &b, &c);
としてください。
そうすると
1,2,3
を入力すると
a=1,b=2,c=3となります。
    • good
    • 0
この回答へのお礼

がんばります

わあ!本当だ!できました!!!
a,b,c(カンマ)で入力したいなら%d%d%dではなく%d,%d,%dに、
逆に%d%d%dでコンパイルした時はカンマではなく半角スペースに!以後気をつけます。。

3.入力された値を印字して、正しく入力されたかどうかを確認する
▶︎これ大事ですね!カンマや半角スペースの間違った方で入力してしまっていたときは予想外の値になっていました、、ありがとうございます!

2.a,b,cは同じ値をいれては、いけません。
▶︎これはラテン方陣の決まりか何かでしょうか?たくさん質問してしまい申し訳ございません。。(>_<)

お礼日時:2023/07/10 11:00

とりあえず、気が付いた点を3つほど述べます。


1.入力データは、カンマで区切るのではなく、半角のスペースで区切ります。

誤 1,2,3
正 1 2 3

2.a,b,cは同じ値をいれては、いけません。
誤 1 1 1
正 1 2 3

3.入力された値を印字して、正しく入力されたかどうかを
確認すると良いです。
scanf("%d%d%d", &a, &b, &c);の次の行に

printf("a=%d b=%d c=%d\n",a,b,c);
を追加してください。
そうすると、a,b,cの値がどのようになっているかが判ります。
    • good
    • 0

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