int mystery(int n) {
int s = 0;
int tmp = n+1;
for (int i; i<=n; i++) {
s = tmp + i;
tmp = s;
}
return s;
}
この関数はどのようにして決定できますか?また、この機能は実行時間に関して改善することができますか?アルゴリズムのステップ数を示す正確な関数を見つける
int mystery(int n) {
int s = 0;
int tmp = n+1;
for (int i; i<=n; i++) {
s = tmp + i;
tmp = s;
}
return s;
}
この関数はどのようにして決定できますか?また、この機能は実行時間に関して改善することができますか?アルゴリズムのステップ数を示す正確な関数を見つける
上記には余分なコードがいくつかあります。 s
は完全に不要です。それなしでそれを書き直すと、それはより明確になります。
int mystery(int n) {
int tmp = n + 1;
for (int i = 1; i<=n; i++) {
tmp += i;
}
return tmp;
}
何それがないこと4、次に3、次に2、その後1を追加
tmp
にこれは、現在の実行中の時間を持っていますO(n)
。しかし、1 + 2 + 3 + ... + N
にはconstant time formulaがあることが判明しました。これを使用して、一定時間である以下を作成することができます。
int mystery(int n) {
int triangleNumber = (n * (n + 1))/2;
return triangleNumber + n + 1;
}
'i'はどこに初期化されていますか?それは不確定です。 「未定義の動作」しかありません。 –
それを見つけられませんでした。お見積もり –
iは初期化されていないため、この関数は未定義の動作を示します。 – dbush