我家的门牌号

· · 题解

解析

设“我家的门牌号”为 x,胡同里总共有 y 家,则:

n = 1 + 2 + 3 + ...... + (x - 1) + (x + 1) + ...... + y - 2x

因此,我们又可以得到:

n = 1 + 2 + 3 + ...... + (x - 1) + x + (x + 1) + ...... + y - 3x

化简后可得:

n = \dfrac{y(y + 1)}{2} - 3x

因为 n < 100000,范围比较小,所以我们可以直接开双重循环枚举 xy

AC code

#include <bits/stdc++.h>
using namespace std;
int n,i,j;
int main(){
    cin >> n;
    for(i = 1; ; i++){
        for(j = 1; j <= i; j++){//双重循环枚举。 
            if(i * (i + 1) / 2 - 3 * j == n){
                cout<< j << " " << i << endl;
                return 0;//一旦符合条件就输出并结束程序。 
            }
        }
    }//因为程序会提前结束,所以最后可以不写return 0! 
}