専門学生です。プログラムを組んだのですが先生に質問されまして、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);
}
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
> すみません、重複ありはすでに提出してて重複なしのコードについて聞かれたものです
随分質問の主旨っつーか体裁が変わってきてますね(笑)。
要するにこうすれば重複なしのコードになるが、それは何故か、と言う質問に変わってます(笑)。
まぁ、でも理由は既に書いたから良いでしょう。
No.7
- 回答日時:
>なぜb=aとしなくてよいのでしょうか。
(a,a,c)の整数解が存在しないことが数学的に明らかだから
と回答すれば良いのでしょうかね。 ((a,a,c)が解ならば、 c = a √2 となり、 aが整数なら、Cは整数になることはないですよね)
No.6
- 回答日時:
> 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で正しいけど」ってのは単純に組み合わせを得るモノとしては貴方の書いたアルゴリズムで良い。ただ、それは重複を除去したモノなのです。
一方、先生が欲しがったのは恐らく、「重複アリ」の結果なんですよ。
(組み合わせ数は貴方の得たモノの、当然二倍になります)
No.5
- 回答日時:
同じ値のべき乗+べき乗が、べき乗になり得ないからでは?
同じ値のべき乗×べき乗なら、べき乗になり得ますけどね。
同じ値のべき乗+べき乗では、その平方根は整数にならないでしょう。
ということは、べき乗と比較して合致するはずがないです。
No.4
- 回答日時:
何のプログラムだろ?
こういうのって一応説明が必要じゃない?
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が自然数じゃなくなるじゃない。
多分そういう事じゃないかしらん。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# プログラミングのペーパーテスト 実行結果の表示を答えてください #include <stdio.h> 2 2022/07/09 16:14
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で%を使わない余りの出し方
-
分数の足し算をさせるプログラ...
-
nCrの計算
-
C言語
-
カードシャッフルのブログラム...
-
CppUnitはCプログラムにも使え...
-
intとlongは同じ?
-
ハフマン符号化の問題を解くプ...
-
C++で表を作成したいのです ...
-
プログラミング
-
VC++でコマンドラインから引数...
-
C言語 サイコロ 2つの値を返せない
-
2÷3などの余りについて
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
break文でループを一気に抜ける...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
再起呼び出しの回数をカウント...
-
C言語で%を使わない余りの出し方
-
迷路を脱出する経路探索プログ...
-
画像の拡大・縮小
-
分数の足し算をさせるプログラ...
-
C言語で簡単なパックマンゲーム...
-
C++で表を作成したいのです ...
-
条件が多い場合
-
複数の共有メモリの作成
-
ヒストグラム均等化処理プログラム
-
3のつく数と3の倍数を表示 C言語
-
argvのNULLチェック
-
乱数で交互に偶数、奇数が、、、。
-
プログラミングに関して
-
OpenCVによる4値化について
-
再帰処理をループ処理に変換
-
16bitで乱数を生成する方法
-
C++ Debug Errorについて教えて
おすすめ情報
いえ b =a +1です。
確認受けてOKだったので大丈夫だと思います。ただ質問に答えられなかったからこういう場合どういう説明すればいいのかなっておもってます
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は別の組み合わせとする、です。ピタゴラス数のやつです。
すみません、重複ありはすでに提出してて重複なしのコードについて聞かれたものです