一重for loop解决,不用两重
AC Code
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,sr;
bool flag;
while(cin>>n)
{
flag=0;
sr=pow(2*n-3,0.5);
for(int i=1;i<=sr;i++)
{
int k=pow(2*n-i*(i+1),0.5);
//do not neglect "k>0"
if(k && k*(k+1)+i*(i+1)==2*n)
{
flag=1;
break;
}
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
本文介绍了一个算法问题:如何判断一个给定的整数是否可以表示为两个三角形数(即三角数)的和。文章提供了一种有效的解决方案,并附带了完整的代码实现,该方案仅使用一个循环即可完成任务。
,
where
.
1165

被折叠的 条评论
为什么被折叠?



