感谢微信平台----一天一道算法题---------每天多一点进步----
今天 刚刚又玩了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\t",j );
26 }
27 printf( "\n" );
28 }
29 i++;
30 cnt++;
31 value = sum - i*(i-1)/2;
32 }
33 printf( "cnt: %d\n",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 }
因为 已经是第二天了 那就顺便给出今日的一句话 或是 一段话
today:
you are
the apple of my eye.
经历过你对我的喜欢,我就会觉得别人对我的喜欢,没法和你相比。被你喜欢过,很难觉得别人有那么喜欢我。
i
miss you
bye bye
一天一道算法题--6.9--数学题
时间: 2024-07-31 20:21:44