| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1232 人关注过本帖, 1 人收藏
标题:非常适合初学者的题目一:正整数表示为 n(n>=2) 个连续正整数之和
只看楼主 加入收藏
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
结帖率:72%
收藏(1)
已结贴  问题点数:20 回复次数:9 
非常适合初学者的题目一:正整数表示为 n(n>=2) 个连续正整数之和
题目描述:一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。

输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出 “NONE” 。

例如,对于 15 ,其输出结果是:
1 2 3 4 5
4 5 6
7 8
对于 16 ,其输出结果是:
NONE


[ 本帖最后由 hwdwow 于 2009-9-16 20:27 编辑 ]
搜索更多相关主题的帖子: 之和 整数 
2009-09-16 15:38
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:2 
献出一个。
程序代码:
 #include<stdio.h> 
 int n; 
 int UserYuH(int i,int x) 
 { 
  if(x==n)return i; 
  else 
    if(x>n)return 0; 
    else 
      UserYuH(i+1,x+(i+1)); 
 } 
 
main() 
{ 
    int i,j,m,y=0; 
    scanf("%d",&n); 
    for(i=1;i<=n/2;i++) 
      { 
       m=UserYuH(i+1,i+(i+1)); 
       if(m!=0) 
     { 
      y++; 
      printf("%d=",n); 
      for(j=i;j<=m;j++) 
        { 
         printf("%d",j); 
         if(j!=m)printf("+"); 
        } 
      printf("\n"); 
     } 
      } 
    if(y==0)printf("NONE\n\n"); 
    getch(); 
}

努力—前进—变老—退休—入土
2009-09-16 16:43
zhjr5201314
Rank: 4
等 级:业余侠客
帖 子:63
专家分:238
注 册:2009-9-10
收藏
得分:2 
#include<stdio.h>
void main()
{
 int n,i,j;
 int sum=0;
 int y=0;
 int b=0;
 scanf("%d",&n);
 for(i=n;i>=2;i--)
 {
     sum=(i-1)*i/2;
 
     if(((n-sum)%i)==0&&(n-sum)>0)
         {
             y=(n-sum)/i;
             for(j=0;j<i;j++)
           {
               printf("%d ",y++);
            b=1;
 
           }
         printf("\n");
         }
 }
 if(b==0)
    printf("NONE\n");
}
2009-09-16 18:19
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
收藏
得分:0 
楼上的思路和我一样,就是利用等差数列求和公式!
2009-09-16 20:28
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:2 
我用批处理写一个
@echo off
setlocal enabledelayedexpansion
set/p var=输入一个正整数:
for /l %%a in (1 1 %var%) do (
    set xin=
    for /l %%i in (%%a 1 %var%) do (
        set/a sum+=%%i
        set "xin=!xin! %%i"
        if !sum!==%var% echo !xin!
    )     
    set/a sum=0
)
pause
2009-09-16 20:56
地狱无明火
Rank: 2
等 级:论坛游民
帖 子:62
专家分:71
注 册:2009-6-11
收藏
得分:2 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    int input;
    int sum;
    int i;
    int j;
    int k;
    int count = 0;
    int *first;
    int *last;
    int *ary;

    printf("Please insert an integer: ");
    scanf("%d", &input);

    ary   = (int*)malloc(input * sizeof(ary));
    first = (int*)malloc(input * sizeof(first));
    last  = (int*)malloc(input * sizeof(last));

    for(i = 0; i < input - 1; i++)
        ary[i] = i + 1;

    for(i = 0; i < input; i++)
    {
        for(k = 0; k < input; k++)
        {
            sum = 0;
            for(j = k; j < input - i; j++)
                sum += ary[j];
            if(sum == input)
            {
                first[count] = k;
                last[count] = j;
                count++;
            }//end if
        }// end for
    }//end for

    if(count == 0)
        printf("NONE\n");
    else
    {
        for(i = count - 1; i >= 0; i--)
        {
            for(j = first[i]; j < last[i]; j++)
                printf("%d ", ary[j]);
            printf("\n");
        }//end for
    }//end else

    return 0;
}

这题好玩
2009-09-16 21:48
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:2 
回复 6楼 地狱无明火
没必要 开数组

我就是真命天子,顺我者生,逆我者死!
2009-09-17 11:56
dream2003
Rank: 1
等 级:新手上路
帖 子:10
专家分:3
注 册:2009-8-23
收藏
得分:2 
main()
{
 int m,a,n,s,t=0,i;
 printf("Input an integer:");
 scanf("%d",&m);
 for(a=1;a<=(m-1)/2;a++)
  for(n=1;;n++)
   {
    s=(n+2*a)*(n+1)/2;
    if(s==m)
     {
      for(i=a;i<=a+n;i++)
      printf("%d ",i);
      printf("\n");
      t++;
      break;
     }
    else if(s<m)
    ;
    else
    break;  
   }
 if(t==0)
 printf("None\n");
 getch();
}


[ 本帖最后由 dream2003 于 2009-9-17 15:32 编辑 ]
2009-09-17 12:25
瀚海
Rank: 1
来 自:浙江金华
等 级:新手上路
帖 子:1
专家分:3
注 册:2009-9-17
收藏
得分:2 
#include<stdio.h>
#include<stdlib.h>
#define pause system("pause")
void main(void)
{
    int i,j=1,k,n,temp=0;
    printf("please enter the number:");
    scanf("%d",&n);
    for(i=1;i<=(n/2+1);i++)
    {
        temp=temp+i;
        while(temp>n)
            temp=temp-j,j++;
        if(temp==n)
        {
            for(k=j;k<=i;k++)
                printf("%d ",k);
            printf("\n");
        }
    }pause;
}

http://shop57083278./
2009-09-17 13:13
编程小白痴
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-6-9
收藏
得分:0 
回复 9楼 瀚海
您这是穷举法对嘛
2020-06-09 23:07
快速回复:非常适合初学者的题目一:正整数表示为 n(n>=2) 个连续正整数之和
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061938 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved