各位的题解都从自家门牌号数,俺不,俺从最大门牌号数^ ^,看着代码好像少好几行。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,cnt=1,sum=1;
cin>>n;
//sum-idx-2*idx=n
while(!(sum>n && (sum-n)%3==0 && (sum-n)/3<=cnt)){
cnt++;
sum+=cnt;
}
cout<<(sum-n)/3<<" "<<cnt<<endl;
}
由题意可得门牌号idx=(sum-n)/3,整数idx∈[1,cnt]。即:
1、门牌号大于0——sum>n
2、门牌号为整数——(sum-n)%3==0
3、门牌号不大于最大门牌号——(sum-n)/3<=cnt
当,1 && 2 && 3 == true时,idx为门牌号,cnt为最大门牌号。