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

感谢微信平台----一天一道算法题---------每天多一点进步----

今天 刚刚又玩了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....

  

 1 // give a sum and n
 2 // so the arr is from 1 to n
 3 // sum = n*(a1+an)/2 = na1 + n*(n-1) / 2;
 4 // so a1 = ( sum - n(n-1)/2 )/n
 5 
 6 #include <iostream>
 7 using namespace std;
 8 
 9 void slove( int sum , int n )
10 {
11     int i , value , cnt , first;
12     if( sum<=0 || n<=0 )
13         return;
14     cnt = 0;
15     i = 1;
16     value = sum - i*(i-1)/2;
17     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
18     {
19         if( value%i==0 ) // the element is integer
20         {
21             first = value/i;
22             printf( "the %d arr:  ",cnt+1 );
23             for( int j = first ; j<first+i ; j++ )
24             {
25                 printf( "%d	",j );
26             }
27             printf( "
" );
28         }
29         i++;
30         cnt++;
31         value = sum - i*(i-1)/2;
32     }
33     printf( "cnt: %d
",cnt );
34 }
35 
36 int main()
37 {
38     int sum , n;
39     while( ~scanf("%d %d",&sum,&n) )
40     {
41         slove( sum , n );
42         getchar();
43     }
44     return 0;
45 }
View Code


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

today:

  you are the apple of my eye.

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

  i     miss    you  

      bye    bye

just follow your heart
原文地址:https://www.cnblogs.com/radical/p/3778956.html