- 问题链接: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; }