文章目录
- 题目描述
- 思路分析
- 评价
题目描述
我家住在一条短胡同里,这条胡同的门牌号从 1 1 1 开始顺序编号。
若所有的门牌号之和减去我家门牌号的两倍,恰好等于 n n n,求我家的门牌号及总共有多少家。
数据保证有唯一解。
时间限制:1 s
内存限制:64 MB
- 输入
一个正整数 n n n。 n < 100000 n < 100000 n<100000。 - 输出
一行,包含两个正整数,分别是我家的门牌号及总共有多少家,中间用单个空格隔开。 - 样例输入
100
- 样例输出
10 15
思路分析
根据题意,我们可以列出方程 t o t a l × ( t o t a l + 1 ) 2 − 2 × m y _ h o m e = n \frac{total\times (total+1)}{2} - 2\times my\_home = n 2total×(total+1)−2×my_home=n,其中 t o t a l total total 表示总户数, m y _ h o m e my\_home my_home 表示我家门牌号。
于是我们可以用双重循环枚举求解此题,由于 m y _ h o m e my\_home my_home 受到 t o t a l total total 的限制,因此外层循环枚举 t o t a l total total,内层循环枚举 m y _ h o m e my\_home my_home,更易于验证。
/** Name: home1.cpp* Problem: 我家的门牌号* Author: Teacher Gao.* Date&Time: 2024/11/19 20:44*/#include <iostream>using namespace std;int main()
{int n;cin >> n;for (int total = 1; ; total++) {for (int my_home = 1; my_home <= total; my_home++) {int sum = total * (total + 1) / 2;if (sum - 2 * my_home == n) {cout << my_home << " " << total << endl;return 0;}}}return 0;
}
事实上,对于两个未知数,一个等式的不定方程,我们可以将方程中的未知数分开两边: t o t a l × ( t