ページ 1 / 1
初歩的な質問ですが、お願いします。
Posted: 2009年11月14日(土) 01:55
by asdfg
最大公約数を求める問題なのですが、よくわからないところがあります。
#include <stdio.h>
int main(void) {
int n1, n2, i, gcd = 1;
puts("整数2つ入力");
printf("1つ目:"); scanf("%d", &n1);
printf("2つ目:"); scanf("%d", &n2);
i = 1;
while (i <= n1 && i <= n2) {
if (n1 % i == 0 && n2 % i == 0) {
gcd *= i;
n1 /= i;
n2 /= i;
i = ●;
} else {
i++;
}
}
printf("gcd = %d\n", gcd);
return 0;
}
というプログラムで、●に適切な"数値"を入れよという問題なんですが、何をいれればよいのでしょうか。
i+1はだめで、数値じゃないとだめらしいです。
もともとの問題は何個か穴埋めの問題があって、ここの部分以外は解けました。
よろしくお願いします。
Re:初歩的な質問ですが、お願いします。
Posted: 2009年11月14日(土) 02:30
by Poco
もともとの問題文の穴はここだけですか?
while文の前のi = 1;も穴じゃありませんでした?
Re:初歩的な質問ですが、お願いします。
Posted: 2009年11月14日(土) 02:41
by asdfg
そうです。穴でした。
この●以外の部分の答えはあり、自分の解答と同じになったので、
●の部分以外の穴は埋めておきました。
●の部分に入る数値はありますか?
ここに数値を入れると、最大公約数は求められないと思うのですが・・・
ミス問でしょうか?
Re:初歩的な質問ですが、お願いします。
Posted: 2009年11月14日(土) 03:43
by Poco
いえ、だとすればi=1も間違っています。
1でもプログラムの動作としては問題ないのですが、
考え方が間違っています。
これってwhile文で素因数分解やっているんですよ。
素因数分解を行うときに、機械的に解くにはどうすればいいか
考えればおのずと答えは見えてくると思います。
ためしにn1=8、n2=12辺りで紙の上で動作を追っていけば答えはすぐに
見つかりますよ。
Re:初歩的な質問ですが、お願いします。
Posted: 2009年11月14日(土) 08:47
by non
そうですねぇ。答えがわからないですね。
i=2で動くには動くのですが、ない方がいいですね。
Re:初歩的な質問ですが、お願いします。
Posted: 2009年11月14日(土) 13:48
by Poco
> そうですねぇ。答えがわからないですね。
> i=2で動くには動くのですが、ない方がいいですね。
>
ああ、互いに素の場合を失念してました。
i=1で良いです。すみません。
Re:初歩的な質問ですが、お願いします。
Posted: 2009年11月14日(土) 21:24
by asdfg
回答有難うございます。
確かに●に入れる数値は2ですね。
これが素因数分解のプログラムということが理解できていませんでした。
あと、while文の前のi=1;の部分は、i=2;のほうがいいですね。
もともとの問題はこうでした。一応載せておきます。(●は適切な語句、★は適切な数値)
#include <stdio.h>
int main(void) {
int n1, n2, i, gcd = 1;
puts("整数2つ入力");
printf("1つ目:"); scanf("●", ●n1);
printf("2つ目:"); scanf("●", ●n2);
i = ★;
while (i <= n1 && i <= n2) {
if (n1 % i == 0 ● n2 % i == 0) {
gcd *= i;
n1 /= i;
n2 /= i;
i = ★;
} else {
●;
}
}
printf("gcd = %d\n", gcd);
return 0;
}
Re:初歩的な質問ですが、お願いします。
Posted: 2009年11月15日(日) 08:56
by non
後ろのi = ★;
は、先生のミスか、わざとでしょう。
Re:初歩的な質問ですが、お願いします。
Posted: 2009年11月26日(木) 22:03
by asdfg
解決し忘れてました。ありがとうございました。