Jayden_316 @ 2023-10-09 21:35:03
60分,时间复杂度太高,达到了O(n ^ 2),n表示 求解得数 ,超时代码:
#include<iostream>
using namespace std;
int k, n = 1;
float sum;
int main(){
cin >> k;
while(sum <= k){
n++;
sum = 0;
for(int i = 1; i <= n; i++) sum += 1.0 / i;
}
cout << n;
return 0;
}
不知道如何简化双重循环,多指教。
by zhouzihang3 @ 2023-10-09 21:39:24
cin>>k;
for(i=1;n<=k;i++) n+=1.0/i;
cout<<i-1;
可以将for循环条件换成另外一个数到达某个条件,如上,于是就可以通过当前加起来的总和与输入的数比较即可
by wangjiawen @ 2023-10-09 21:40:08
@Jayden_316
就用一个while就行啊
#include<iostream>
using namespace std;
long long n,ans;
double m;
int main()
{
cin>>n;
while(m<=n)
{
ans++;
m=m+1.0/ans;
}
cout<<ans;
return 0;
}
by zhouzihang3 @ 2023-10-09 21:42:24
@wangjiawen n和ans无需开long long,数据很小,打表都能过
by wangjiawen @ 2023-10-09 21:44:03
@zero_egg 额,我习惯了开long long除非被卡ML,我一般不改为int。
by zhouzihang3 @ 2023-10-09 21:51:35
烦@wangjiawen 上周上课的时候改的清奇缺省源
#define L int
#define int long long
#define returnO_o return 0
#difine mian main
真6,**滥用标题行特判
by wangjiawen @ 2023-10-09 21:55:43
@zero_egg 9