编程题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。

求C或C++解法,最好是C,谢谢~... 求C或C++解法,最好是C,谢谢~ 展开
 我来答
毛毛虫丶
2008-10-04 · 超过28用户采纳过TA的回答
知道答主
回答量:235
采纳率:0%
帮助的人:0
展开全部
解题思路:假设正整数 n 能表示为 i 个连续正整数之和且其第一个数为 x,则 n = x * i + (i - 1) * i/2,其中 n, x, i 都为正整数,所以如果 x = (n - (i-1)*i/2) / i 为正整数,则 n 就能表示为i个连续正整数之和。i 的取值范围为2-n/2 +2。

Python答案:
# !/usr/bin/env python
# -*- coding: utf-8 -*-

def foo(n):
for i in range(2, n/2 + 2):
if ((n - (i-1)*i/2) % i) == 0:
x = (n - (i-1)*i/2) / i
print '%d = ' % n,
for j in range(i):
print x + j,
print '\n'
break
else:
print 'cant'

foo(3)
foo(5)
foo(8)
foo(10)
foo(28)
foo(37)
foo(66)
foo(88)
foo(136)
foo(1024)
foo(5050)
江边浪人夏
2008-10-04 · 超过20用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:0
展开全部
#include<stdio.h>
void main()
{
int i,z,x,y,j;
printf("please input z:");//输入整数
scanf("%d",&z);
for(i=1;i<=z;i++)//i:整数序列的个数
for(x=1;x<=z;x++)
{
y=i-1+x;
if((y+x)*i==2*z)
{
for(j=x;j<=y;j++)
printf("%3d",j);
printf("\n");
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9119d16cb
2008-10-04 · 超过35用户采纳过TA的回答
知道答主
回答量:113
采纳率:0%
帮助的人:118万
展开全部
语言只是一个工具,如果不是嫌效率低的话,建议楼主选择: 毛毛虫丶 - 助理 三级 的答案。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
598982899
2008-10-04
知道答主
回答量:56
采纳率:0%
帮助的人:21.7万
展开全部
Python答案:
# !/usr/bin/env python
# -*- coding: utf-8 -*-

def foo(n):
for i in range(2, n/2 + 2):
if ((n - (i-1)*i/2) % i) == 0:
x = (n - (i-1)*i/2) / i
print '%d = ' % n,
for j in range(i):
print x + j,
print '\n'
break
else:
print 'cant'

foo(3)
foo(5)
foo(8)
foo(10)
foo(28)
foo(37)
foo(66)
foo(88)
foo(136)
foo(1024)
foo(5050)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式