黑马程序员技术交流社区
标题:
黑马大神看过来,超经典的面试题,过来动动脑吧
[打印本页]
作者:
Bellriver
时间:
2016-4-29 00:13
标题:
黑马大神看过来,超经典的面试题,过来动动脑吧
本帖最后由 Bellriver 于 2016-4-29 00:18 编辑
给出一个整数,判断是否有连续的自然数相加等于这个整数,如果有,请列出这一串自然并计算出一共有多少个?
例如:
3=1+2 (1个)
5=2+3 (1个)
6=1+2+3 (1个)
7=3+4 (1个)
9=4+5 / 2+3+4 ( 2个)
10=1+2+3+4 (1个)
11=5+6 (1个)
12=3+4+5 ( 1个)
......
作者:
lls061339
时间:
2016-4-29 08:43
一个数M若可以写成以a开头的连续n个自然数之和,则M=a+(a+1)+(a+2)+…+(a+n-1)=n*a+n*(n-1)/2,要求a!=0,否则就是以a+1开头的连续n-1个整数了,也就是要求(M-n*(n-1)/2)%n==0,这样就很容易判断一个数可不可以写成连续n个自然数的形式了,遍历n=2…sqrt(M)*2,还可以输出所有解。
复制代码
void divide(int num)
{
int i,j,a;
for(i=2; i<=sqrt((float)num)*2; ++i)
{
if((num-i*(i-1)/2)%i==0)
{
a=(num-i*(i-1)/2)/i;
if(a>0)
{
for(j=0; j<i; ++j)
cout<<a+j<<" ";
}
cout<<endl;
}
}
}
作者:
toukya
时间:
2016-4-29 10:29
public class Testt {
private static void f(int i,int c){
if(c>=i)
return;
int sum = 0;
for(int k=c;k<i;k++)
{
sum+=k;
if(sum==i)
{
System.out.println(i);
break;
}
}
}
public static void main(String[] args) {
for(int i = 1;i<100;i++)
{
for(int j=1;j<i;j++)
{
//System.out.println("TEST:"+i);
f(i,j);
}
}
}
}
作者:
九天玄妖
时间:
2016-4-29 14:01
可以练练手,开发下大脑。
作者:
w125621538
时间:
2016-4-29 18:57
soga,待我先吃个核桃
作者:
wufengqiao
时间:
2016-4-29 23:00
好东西,可以做一下
作者:
wenle00
时间:
2016-4-29 23:10
兄弟,我过来看看你啦.顶你哦
作者:
执着为梦
时间:
2016-4-29 23:32
脑细胞死了太多,也想不开
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2