1回目の試行 A * n
2回目の試行 A * n^2
・・・
5回目の試行 A * n^5
とする時、A * n^5が10000未満なら、nの値を+1して再度1回目から試行する。
ということですね?
質問への回答
for文が終了し、while文の条件を満たさないとき、再度試行を行いますが。
その際に、A = A * n^5の最後の試行の代入結果が残ってしまっています。
つまり、
n = 2の時のAの開始値が、n = 1の時のAの最終値となっており、
A = 1で開始されていない為、予想の値となっていない、ということだと思います。
while文の開始の最初、for文実行前にA = 1と代入しAをリセットする必要があります。
public static void main(String[] args) {
int n=1 ; //n^5の底を1としてスタート
int A=1; //A=1からスタート
while(A<=10000) {
A = 1;//試行する場合は、Aをリセットする
for(int i=1;i<=5; i++) {
A=A*n;//このfor文でn^iをiが1〜5まで5回繰り返す
}
n++;//for文で繰り返したn^5をn=1から始めて+1し続けて、Aが10000以下になるか判定
}
System.out.println(n);//n^5の底であるnの値を出力
}
自己解決への指摘
A = 1をfor文の前に記載する理由は、先に記載した通りです。
n++;はfor文の後でも前でもよいのですが、前に記載する場合は、
nの初期化宣言時にn = 0で初期化する必要があります。
int n = 1;で宣言し、for文の前にn++;が記載されている場合、
一番最初の試行はn = 2で行われます。
n = 1の時の試行を行っていないことに注意して下さい。
今回はAの初期値がA = 1のみで、n = 1は必ず答えとならない為に問題になっていませんが、
Aの開始値も+1して順に検査していく、というような時、
n = 1の試行を行っていないのは致命的です。
public static void main(String[] args) {
int n=0 ; //試行開始前に+1する為、0で初期化。試行はn=1から行う。
int A=1; //A=1からスタート
while(A<=10000) {
n++; //n=1から順に試行を行う
A = 1;//試行する場合は、Aをリセットする
for(int i=1;i<=5; i++) {
A=A*n;//このfor文でn^iをiが1〜5まで5回繰り返す
}
n++;//for文で繰り返したn^5をn=1から始めて+1し続けて、Aが10000以下になるか判定
}
System.out.println(n);//n^5の底であるnの値を出力
}