注意即使与m相等也会塌方 #include <iostream> using namespace std; int main() { int m,n; while(cin>>m>>n&&m!=-1&&n!=-1) { int flag=0;double sum=0.0; int t=0; for(int i=1;i<=n&&flag==0;i++) { if(i==1){ sum+=double(i+0.0)/1.0; t++; //cout<<t<<endl; if(sum>=m) flag=1; } else if(flag==0) { if(i%2==0){ sum+=1.0/double(i+0.0); t++; //cout<<t<<endl; if(sum>=m) flag=1; for(int j=0;j<i-1&&flag==0;j++){ sum+=double(j+2.0)/double(i-j-1.0); t++; //cout<<t<<endl; if(sum>=m) flag=1; } } else if(i%2!=0){ sum+=double(i+0.0)/1.0;t++;//cout<<t<<endl; if(sum>=m) flag=1; for(int j=0;j<i-1&&flag==0;j++){ sum+=double(i-j-1.0)/double(j+2.0); t++; if(sum>=m) flag=1; } } } } if(flag==0) cout<<t<<endl; else cout<<t-1<<endl; } return 0; }