1404:我家的门牌号
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 5325 通过数: 3656
【题目描述】
我家住在一条短胡同里,这条胡同的门牌号从1开始顺序编号。
若其余各家的门牌号之和减去我家门牌号的两倍,恰好等于n,求我家的门牌号及总共有多少家。数据保证有唯一解。
【输入】
一个正整数n。n<100000。
【输出】
一行,包含两个正整数,分别是我家的门牌号及总共有多少家,中间用单个空格隔开。
【输入样例】
100
【输出样例】
12 16
【来源】
1404 我家的门牌号
由题意得
设总家数为x,我的家的门牌号为y, y<=x
(1+x)x/2-3y =N
=>x*x+x-6y=2N
=>x*x+x-2N=6y (y<=x) 1
由1等式分析有如果y变大,x就得变小。
设y=x,则总家数至少为x,代入1得
x*x+x-6x=2N
x*x-5x=2N
(x-5/2)2 =2N+25/2
x=
if((x*x+x-2N)%6==0)成立,
则y=(x*x+x-2N)/6,
输出cout<<y<<" "<<x;
参与代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int i,x,y,N;
cin>>N;
x=sqrt(2*N+25/4);//+5/2;
//x =sqrt(N);
int j = 0;
for(i = x;i>x-1;i++)
{
if((i*i+i)-2*N<0)
{
cout<<i<<endl;
continue;
}
if((i*i+i-2*N)%6==0)
{
y = (i*i+i-2*N)/6;
cout<<y<<" "<<i;
break;//大于有10就结束。
}
}
return 0;
}