-
问题链接:POJ NOI MATH-7649 我家的门牌号
。
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
我家住在一条短胡同里,这条胡同的门牌号从1开始顺序编号。
若所有的门牌号之和减去我家门牌号的两倍,恰好等于n,求我家的门牌号及总共有多少家。
数据保证有唯一解。
输入
- 一个正整数n。n < 100000。 输出
- 一行,包含两个正整数,分别是我家的门牌号及总共有多少家,中间用单个空格隔开。 样例输入
-
100
样例输出
-
10 15
来源
- 《奥数典型题举一反三(小学六年级)》 (ISBN 978-7-5445-2883-2) 第二章 第七讲 例2 拓展一
问题分析
本题的用穷举法求解。
假设总共有k家,我家门牌号为x,那么k(k+1)/2 -2x=n,得k(k+1)-2n=4x>=4(因为x>=1)。
推导得:(k+1)(k+1) > k(k+1)>=4+2n,最后得:k>sqrt(4+2n)-1。
程序说明
程序中,尽量减少穷举的数量。
AC的C++语言程序:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n, mink, x;
cin >> n;
mink = sqrt(4 + 2 * n) - 1;
for(int i=mink+1; ;i++) {
if((i * i + i - 2 * n) % 4 == 0) {
x = (i * i + i - 2 * n) / 4;
if(x <= 0)
continue;
cout << x << " " << i << endl;
break;
}
}
return 0;
}