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

専門学生です。プログラムを組んだのですが先生に質問されまして、b = aとしないとa *a + b*b=c*cの判定ができなくなってしまいます。結果としてb=a+1で正しいけど、なぜb=aとしなくてよいのかと言われましたが答えられませんでした。なぜb=aとしなくてよいのでしょうか。

#include <stdio.h>

void main()
{
int a;
int b;
int c;
int n = 0;
for(a = 1; a <= 100; a++)
{
for(b = a + 1; b <= 100; b++)
{
for(c = 1; c <= 100; c++)
{
if(a * a + b * b == c * c)
{
printf("a = %3d, b = %3d, c = %3d\n", a, b, c);
n++;
}
}
}
}
printf("組み合わせの数:%d\n", n);
}

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

  • いえ b =a +1です。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/06/03 23:20
  • 確認受けてOKだったので大丈夫だと思います。ただ質問に答えられなかったからこういう場合どういう説明すればいいのかなっておもってます

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/06/03 23:43
  • a,b,cを、いずれも1以上100以下の整数とするとき、a*a+b*b=c*cを満たす、全てのa,b,cの組み合わせ全てと、その数を求め、画面に表示しなさい。ただし、a,bの数値の組み合わせが同じものも別のものとしてもかまわない。具体的には、a=3,b=4,c=5と、a=4,b=3,c=5は別の組み合わせとする、です。ピタゴラス数のやつです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2021/06/03 23:52
  • すみません、重複ありはすでに提出してて重複なしのコードについて聞かれたものです

      補足日時:2021/06/04 09:19

A 回答 (8件)

> すみません、重複ありはすでに提出してて重複なしのコードについて聞かれたものです



随分質問の主旨っつーか体裁が変わってきてますね(笑)。
要するにこうすれば重複なしのコードになるが、それは何故か、と言う質問に変わってます(笑)。
まぁ、でも理由は既に書いたから良いでしょう。
    • good
    • 0

>なぜb=aとしなくてよいのでしょうか。



(a,a,c)の整数解が存在しないことが数学的に明らかだから

と回答すれば良いのでしょうかね。 ((a,a,c)が解ならば、 c = a √2 となり、 aが整数なら、Cは整数になることはないですよね)
    • good
    • 0

> a,b,cを、いずれも1以上100以下の整数とするとき、a*a+b*b=c*cを満たす、全てのa,b,cの組み合わせ全てと、その数を求め、画面に表示しなさい。

ただし、a,bの数値の組み合わせが同じものも別のものとしてもかまわない。具体的には、a=3,b=4,c=5と、a=4,b=3,c=5は別の組み合わせとする、です。ピタゴラス数のやつです。

了解。
って事は#4で書いた通りですよ。

2*a^2 = c^2

は解になりようが無いので、もちろん計算してもいいけど、明らかに解にならない場合は削除して良い、って事ですよね。

高校でやる背理法っぽい考え方なんで、どっちかっつーとプログラミングの話題と言うよか数学の範疇ですね。

ただし、です。

> a,bの数値の組み合わせが同じものも別のものとしてもかまわない。具体的には、a=3,b=4,c=5と、a=4,b=3,c=5は別の組み合わせとする

と言う場合、bの値をa + 1から始めちゃった場合、

a=3,b=4,c=5

は出るけど、

a=4,b=3,c=5

は出ないんですよ。
理由は分かりますよね?「bは必ずa + 1からスタートするから」です。
後者だとb < aになってて、これは貴方の書いたプログラムじゃ出てこない組み合わせです。

先生が指摘した「結果としてb=a+1で正しいけど」ってのは単純に組み合わせを得るモノとしては貴方の書いたアルゴリズムで良い。ただ、それは重複を除去したモノなのです。
一方、先生が欲しがったのは恐らく、「重複アリ」の結果なんですよ。
(組み合わせ数は貴方の得たモノの、当然二倍になります)
    • good
    • 1

同じ値のべき乗+べき乗が、べき乗になり得ないからでは?


同じ値のべき乗×べき乗なら、べき乗になり得ますけどね。
同じ値のべき乗+べき乗では、その平方根は整数にならないでしょう。
ということは、べき乗と比較して合致するはずがないです。
    • good
    • 0

何のプログラムだろ?


こういうのって一応説明が必要じゃない?

a^2 + b^2 = c^2

を満たす自然数の組(a, b, c)を探せ、って事かしら。

仮に b = aだとすると与式は

a^2 + a^2 = c^2
2*a^2 = c^2
c = ±a*√2

になる、って事でしょ?そうすると、cが自然数って要請に反するから、じゃないの?
仮にcが自然数だとすればa×√2が自然数になる。ただし、そうするとaが自然数じゃなくなるじゃない。

多分そういう事じゃないかしらん。
この回答への補足あり
    • good
    • 1

a,b,cの値が出力されているところは1,2,5から始まってますか?


始まってたら数字があわないはずなんですが
この回答への補足あり
    • good
    • 0

すみません打ち間違えました、なるほどです

    • good
    • 0

結果としとa=b+1で正しいということはb+1で正解の個数が出力されたということですか?

この回答への補足あり
    • good
    • 0

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