使用i表示总的门牌,这个上限暂时未知,使用j表示我家的门牌,这个上限j小于i。使用sum表示门牌号总和,每一次的sum等于上次的sum加上当前的i。
其余各家的门牌号之和等于sum-j,我家的门牌号的两倍等于2*j,于是得到公式sum-3*j==n,当这个条件满足时,输出i和j,并且使用return 0退出循环,因为break只能退出一层循环。
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int sum=0;
for(int i=1;;i++) //i表示总的门牌号
{
sum+=i; //该次总和等于前一次的加上当前的
for(int j=1;j<i;j++) //j表示家的门牌号
{
if(sum-j-2*j==n)
{
cout<<j<<" "<<i<<endl;
return 0;
}
}
}
return 0;
}