提交时间:2021-05-27 21:52:11

运行 ID: 20013

#include<bits/stdc++.h> using namespace std; int sum=0; long long a,n,k,kk; int main(){ cin>>n; for(k=2;k<=n;++k){//k为木头分为多少排一堆 kk=(1+k-1)*(k-1)/2;//1到k-1的和 if(n-kk<=0)break;//这时的k为最大分的排数 a=(n-kk)/k;//求出第一排有多少个木头 if(a*k+kk==n)sum++;//各排数据之和==n,是合理的 } cout<<sum; return 0; }