您的位置:首页 > 其它

一天一道算法题--6.9--数学题

2014-06-09 22:49 225 查看
感谢微信平台----一天一道算法题---------每天多一点进步----

今天 刚刚又玩了2盘 LOL 把我的时间全给弄光了.....

因为 晚上 可能开始写课程设计了 抓紧时间 写了今天的

关于那个 stack的 感觉超出我预期想象了 得压几天了 哎..

problem:

  求和为指定数字的连续正整数序列

  for example:

    Sn = 100时

    18 19 20 21 22

    9 10 11 12 13 14 15 16

analyse:

  有事 先撤.....

  刚刚头太痛 眼睛太酸了 应该是每晚太晚睡了.... 白天 又要早起 早自习 虽然 经常一睡就到9点了.....

  好 回到这题

  晓爷 说我英语他渣 怎么过6J 所以 我决定 今天 代码的注释 都用 英文来实现.... 为6J准备...

  这题的关键是 把握住 等差数列求和的转换 注意到可以转换成一次线性方程

  好 我下面上demo....

  

// give a sum and n
// so the arr is from 1 to n
// sum = n*(a1+an)/2 = na1 + n*(n-1) / 2;
// so a1 = ( sum - n(n-1)/2 )/n

#include <iostream>
using namespace std;

void slove( int sum , int n )
{
int i , value , cnt , first;
if( sum<=0 || n<=0 )
return;
cnt = 0;
i = 1;
value = sum - i*(i-1)/2;
while( value>=i ) // because a1 = ( sum - n*(n-1)/2 ) /n  if this can be worked the value must >= n and because the element must >=1 you know the arr is from 1 to n
{
if( value%i==0 ) // the element is integer
{
first = value/i;
printf( "the %d arr:  ",cnt+1 );
for( int j = first ; j<first+i ; j++ )
{
printf( "%d\t",j );
}
printf( "\n" );
}
i++;
cnt++;
value = sum - i*(i-1)/2;
}
printf( "cnt: %d\n",cnt );
}

int main()
{
int sum , n;
while( ~scanf("%d %d",&sum,&n) )
{
slove( sum , n );
getchar();
}
return 0;
}


View Code

因为 已经是第二天了 那就顺便给出今日的一句话 或是 一段话

today:

  you are the apple of my eye.

  经历过你对我的喜欢,我就会觉得别人对我的喜欢,没法和你相比。被你喜欢过,很难觉得别人有那么喜欢我。

  i miss you

bye bye
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: