解题思路:
根据求和公式,m=n*(n+1)/2,知道m逆求n,n大概等于根号下(m*2),演算一下,不是就+1。
n*(n+1)/2可以写成(n*-~n>>1)
>>1是二进制右移,相当于/2
~n=-n-1,-~n=n+1
使用二进制可以加快运行速度
以上。
参考代码:
#include <iostream> #include <cmath> using namespace std; int main() { int n,m; cin>>m; n=sqrt(m*2); if((n*-~n>>1)>=m){ cout<<n; }else{ cout<<n+1; } return 0; }
0.0分
155 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1162 |
C语言程序设计教程(第三版)课后习题6.5 (C++代码)浏览:458 |
【计算两点间的距离】 (C语言代码)浏览:1494 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:591 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:569 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:657 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1189 |
拯救雅典娜浏览:1242 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:456 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:3359 |