各位的题解都从自家门牌号数,俺不,俺从最大门牌号数^ ^,看着代码好像少好几行。
#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为最大门牌号。
本文介绍了一种寻找特定条件下的最大门牌号数的算法。通过递增计数和累积求和的方式,判断门牌号是否满足大于0、为整数且不大于最大门牌号的条件。代码简洁,逻辑清晰,适用于解决类似问题。
999

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



