20030103pz @ 2018-04-04 20:58:38
using namespace std;
int main()
{
int k,n=0;
cin>>k;
while (k>=0)
{
n=n+1;
k=k-1/n;
}
cout<<n;
return 0;
}
//为什么tle了
by sachzhou @ 2018-04-04 21:20:28
@20030103pz 记得发代码以后要加上格式,方法是在代码前后各加上3个下面的符号。(按键在TAB键的上方和主键盘数字1键的左方,在英文输入模式下敲击可以得到这个符号)
在这中间写代码
// 您的做法
# include <iostream>
using namespace std;
int main() {
int k,n=0;
cin>>k;
while (k>=0) {
n=n+1;
k=k-1/n;
}
cout<<n;
return 0;
}
//为什么tle了
做法不对。
k
是整数,而1/n
是浮点数,因此,当你用k=k-1/n
计算时,得到的一个浮点数会被向0取整,即如果你得到的数字是1.333
会被舍弃整数变成1
,-1.2
会变成-1
。请注意并不是向下取整(向下取整时,-1.2
应该变成-2
而不是-1
,因为-2<-1
是更靠下的)这导致你减到比0小一点但大于-1
的时候k会被取整成为0
,而这是满足你的循环条件k>=0
的,于是程序陷入了死循环。# include <iostream>
using namespace std;
int main() {
int n=0;
double k;//k应该是浮点数
cin>>k;
while (k>=0){
n=n+1;
k=(k-1.0/n);
}
cout<<n;
return 0;
}
by 20030103pz @ 2018-04-06 08:38:27
@da32s1da
@x義x
@linzhihan
@时间之矢
多谢,初三忙,没时间去补课,自学效果略差,多练应该会好一些的。