我正在學習編碼基礎知識,并且必須撰寫一個代碼來計算可以使用可用塊“x”構建金字塔的多少層,如果每個級別都是平方的(例如 1st=1、2nd=4、3rd=9 等.) 這是我到目前為止所擁有的,對于我的生活,我看不出我錯在哪里,但是代碼不斷回傳的值比它應該回傳的值多 2(例如 x=25 應該導致 3 不是5)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int i, x, y=0;
cout<< "How many blocks do you have?"<< endl;
cin>> x;
for (i=1; y<=x; i ) {
y=y pow(i, 2);
} cout<< i <<endl;
return 0;
}
uj5u.com熱心網友回復:
for 回圈不正確
for (i=1; y<=x; i ) {
y=y pow(i, 2);
}
這個運算式的結果
y=y pow(i, 2);
可以大于 x 但 i 的值會增加。
例如,您可以通過以下方式撰寫 for 回圈
int tmp;
for ( i = 0; ( tmp = pow(i 1, 2) ) y <=x; i ) {
y = tmp;
}
uj5u.com熱心網友回復:
這是因為即使下一層無法制作,您的 for 回圈也能正常作業,然后它會再次增加 i 。這就是為什么你的結果比它應該大 2 的原因。嘗試這個:
int tmp;
while(true){
tmp = y i*i;
if(tmp > x) //check if this layer is possible to create
{
i--; //its impossible , so answer is previous i
break;
}
i =1;
y = tmp;
} cout<< i <<endl;
uj5u.com熱心網友回復:
如果您想讓代碼幾乎保持原樣,這也很有效:
int i, x, y=1; // y is now 1
cout<< "How many blocks do you have?"<< endl;
cin>> x;
for (i=2; y<=x; i ) { // i now starts from 2
y=y pow(i, 2);
}
cout<<i-2<<endl; // now i-2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/482803.html
