免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: drakness
打印 上一主题 下一主题

出个题:求和为正整数n的连续整数序列 [复制链接]

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
11 [报告]
发表于 2015-11-07 13:06 |只看该作者
回复 7# drakness

赞一个!
屌 !
这就更略屌了 [ ]

   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
12 [报告]
发表于 2015-11-07 13:16 |只看该作者
回复 10# drakness


    膜拜大牛 []
   长见识了!
能说说思路吗?
让小白开开眼界

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
13 [报告]
发表于 2015-11-07 14:07 |只看该作者
本帖最后由 substr函数 于 2015-11-07 16:36 编辑

回复 7# drakness

[回复] 略能再屌 [ ]
  1. #!/usr/bin/python2

  2. def calc(n):
  3.     N2 = n * 2
  4.     h  = int(N2**0.5)
  5.     for k in xrange(2, h + 1):
  6.         if N2 % k: continue
  7.         t1 = N2 - k * k + k
  8.         t2 = N2 + k * k - k
  9.         K2 = k * 2
  10.         if t1 % K2 == 0 and t2 % K2 == 0:
  11.             s1 = t1 / K2
  12.             s2 = t2 / K2
  13.             print s1, '-', s2
  14.             # print ' '.join(str(s) for s in xrange(s1, s2 + 1))

  15. calc(200000000000000)
复制代码

论坛徽章:
10
2015年亚洲杯之科威特
日期:2015-04-13 13:51:5315-16赛季CBA联赛之山东
日期:2016-01-16 18:35:0815-16赛季CBA联赛之广东
日期:2016-01-04 15:26:23程序设计版块每日发帖之星
日期:2015-11-13 06:20:002015亚冠之阿尔艾因
日期:2015-11-10 12:32:242015亚冠之阿尔沙巴布
日期:2015-05-15 18:26:49羊年新春福章
日期:2015-04-28 16:45:112015年亚洲杯之伊拉克
日期:2015-04-25 20:06:30羊年新春福章
日期:2015-04-13 13:53:2015-16赛季CBA联赛之八一
日期:2016-01-20 18:23:49
14 [报告]
发表于 2015-11-09 10:17 |只看该作者
回复 12# substr函数

小弟不才,我利用了等差数列求和,及开平方求因子,保证i , j 均为整数

论坛徽章:
10
2015年亚洲杯之科威特
日期:2015-04-13 13:51:5315-16赛季CBA联赛之山东
日期:2016-01-16 18:35:0815-16赛季CBA联赛之广东
日期:2016-01-04 15:26:23程序设计版块每日发帖之星
日期:2015-11-13 06:20:002015亚冠之阿尔艾因
日期:2015-11-10 12:32:242015亚冠之阿尔沙巴布
日期:2015-05-15 18:26:49羊年新春福章
日期:2015-04-28 16:45:112015年亚洲杯之伊拉克
日期:2015-04-25 20:06:30羊年新春福章
日期:2015-04-13 13:53:2015-16赛季CBA联赛之八一
日期:2016-01-20 18:23:49
15 [报告]
发表于 2015-11-09 10:19 |只看该作者
回复 13# substr函数


    再次膜拜大牛

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
16 [报告]
发表于 2015-11-09 13:56 |只看该作者
本帖最后由 substr函数 于 2015-11-09 14:04 编辑

回复 14# drakness

膜拜大牛 [ ]
长见识了! 谢谢大牛的帮助
我的理解

i = (n2 / k - k + 1) / 2.0
  1. def N2S(n):
  2.     n2 = n * 2
  3.     z = int(n2**0.5)
  4.     for k in xrange(z, 1, -1):
  5.         if n2 % k: continue
  6.         i = (n2 / k - k + 1) / 2.0
  7.         if int(i) == i: print int(i), '-', k + int(i) - 1
复制代码
如果 i 为整数
可以保证 j 为整数 ( j = i + k - 1 )

所以可以
  1. def A2(n):
  2.     N2 = n * 2
  3.     h = int(N2**0.5)
  4.     for k in xrange(h, 1, -1):
  5.         if N2 % k: continue
  6.         T = N2 - k * k + k
  7.         K = k * 2
  8.         if T % K == 0:
  9.             i = T / K
  10.             j = i + k - 1
  11.             print i, '-', j
复制代码

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
17 [报告]
发表于 2015-11-10 13:51 |只看该作者
可以比较简单的做到:
  1. def NumberSequence(number):
  2.     base = 2
  3.     while (number - base * (base + 1) / 2) >= 0 :
  4.         if (number - base * (base + 1) / 2) % base == 0:
  5.             start = (number - base * (base + 1) / 2) / base
  6.             print range(start + 1, start + base + 1)
  7.         base += 1
复制代码
基本上,去除等差数列导致的差之和之后,如果可以整除当前的数字个数,那么就可以求得解,不用开方的。
另:为了偷懒,没有把打印部分单独出来,从代码风格来说,反而紧耦合了,不好。

评分

参与人数 1信誉积分 +10 收起 理由
substr函数 + 10 赞! [膜拜 大牛] 一个

查看全部评分

论坛徽章:
10
2015年亚洲杯之科威特
日期:2015-04-13 13:51:5315-16赛季CBA联赛之山东
日期:2016-01-16 18:35:0815-16赛季CBA联赛之广东
日期:2016-01-04 15:26:23程序设计版块每日发帖之星
日期:2015-11-13 06:20:002015亚冠之阿尔艾因
日期:2015-11-10 12:32:242015亚冠之阿尔沙巴布
日期:2015-05-15 18:26:49羊年新春福章
日期:2015-04-28 16:45:112015年亚洲杯之伊拉克
日期:2015-04-25 20:06:30羊年新春福章
日期:2015-04-13 13:53:2015-16赛季CBA联赛之八一
日期:2016-01-20 18:23:49
18 [报告]
发表于 2015-11-10 14:20 |只看该作者
回复 17# icymirror


    学习了

论坛徽章:
0
19 [报告]
发表于 2015-11-10 16:19 |只看该作者
  1. #coding:utf-8
  2. '''
  3. 题目:输入一个正数n,输出所有和为n连续正数序列
  4.      例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
  5. '''

  6. n = 100

  7. i = m = 1
  8. results = []

  9. while i <= n/2 + 1 :
  10.     results.append(m)
  11.     if sum(results) > n :
  12.         i += 1
  13.         m = i
  14.         results = []
  15.     elif sum(results) == n :
  16.         print results
  17.         i += 1
  18.         m = i
  19.         results = []
  20.     else :
  21.         m += 1
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP