编程题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。
来源:百度知道 编辑:UC知道 时间:2024/06/21 12:38:21
#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");
}
}
}
解题思路:假设正整数 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: