首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 软件考试 > 复习指导 >

连续正整数的算法实现方法

2009-02-07 
数据结构

    题目描述:
  一个正整数有可能可以被表示为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
  评分标准:
  程序输出结果是否正确。
  算法思想:
  比较简单,这里不再赘述
  代码如下:
  /**//************************************************************************
  * 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
  * 15=1+2+3+4+5
  * 15=4+5+6
  * 15=7+8
  * 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列
  ************************************************************************/
  #include <stdio.h>
  #include <VECTOR>
  using namespace std;
  class PositiveInteger
  ...{
  public:
  vector <int> m_vecBegin;//the begin integer of the sequence
  vector <int> m_vecEnd; //the end integer of the sequence
  public:
  PositiveInteger()
  ...{
  m_vecBegin.clear();
  m_vecEnd.clear();
  }
  ~PositiveInteger()...{}
  void GetIntegerSequence(int n);
  void display(int n);
  };
  void PositiveInteger::GetIntegerSequence(int n)
  ...{
  int i,sum,begin;
  i=begin=1;
  sum=0;
  while(begin<=n/2)
  ...{
  sum+=i++;
  if(sum==n)
  ...{
  m_vecBegin.push_back(begin);
  m_vecEnd.push_back(i-1);
  i=++begin;
  sum=0;
  }
  else if(sum>n)
  ...{
  i=++begin;
  sum=0;
  }
  }
  }
  void PositiveInteger::display(int n)
  ...{
  int size=m_vecBegin.size();
  if(size==0)
  ...{
  printf(\" NONE \");
  }
  else
  ...{
  for(int i=0;i<size;i++)
  ...{
  printf(\" %d=%d\",n,m_vecBegin.at(i));
  for(int j=m_vecBegin.at(i)+1;j<=m_vecEnd.at(i);j++)
  printf(\"+%d\",j);
  }
  printf(\" \");
  }
  }
  //显示菜单
  void show_menu()
  ...{
  printf(\"--------------------------------------------- \");
  printf(\"input command to test the program \");
  printf(\" i or I : input n to test \");
  printf(\" q or Q : quit \");
  printf(\"--------------------------------------------- \");
  printf(\"$ input command >\");
  }
  void main()
  ...{
  char sinput[10];
  int n;
  show_menu();
  scanf(\"%s\",sinput);
  while(stricmp(sinput,\"q\")!=0)
  ...{
  if(stricmp(sinput,\"i\")==0)
  ...{
  printf(\" please input an integer:\");
  scanf(\"%d\",&n);
  PositiveInteger obj;
  obj.GetIntegerSequence(n);
  obj.display(n);
  }
  //输入命令
  printf(\"$ input command >\");
  scanf(\"%s\",sinput);
  }
  }

 

3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/

热点排行