程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++初學者之依據輸出的任何一個正整數,輸入能夠被表現的持續正整數

C++初學者之依據輸出的任何一個正整數,輸入能夠被表現的持續正整數

編輯:關於C++

C++初學者之依據輸出的任何一個正整數,輸入能夠被表現的持續正整數。本站提示廣大學習愛好者:(C++初學者之依據輸出的任何一個正整數,輸入能夠被表現的持續正整數)文章只能為提供參考,不一定能成為您想要的結果。以下是C++初學者之依據輸出的任何一個正整數,輸入能夠被表現的持續正整數正文


標題描寫:一個正整數有能夠可以被表現為 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

這是一道2005年百度之星法式設計年夜賽試題預賽標題。思緒以下:

1、知足請求的數是持續的,所以只需選定肇端值累加乞降便可;

2、要確保遍歷一切能夠的肇端值而且讓輪回的次數盡可能少。剖析一下可以曉得,一個數起碼由兩個數乞降組成,又由於這兩個數是持續的。所以最年夜的肇端值不會年夜於該數的二分之一。

代碼以下,VC6.0驗證OK。請拍磚,^_^

#include <iostream>
#include <vector>
using namespace std;
// 依據輸出的任何一個正整數,輸入能夠被表現的持續正整數
void Numbers(int number)
{
if (number <= )
{
return;
}
vector<int> save;
bool exist = false;
// 遍歷能夠的肇端值
for (int possible = ; possible < number / + ; possible++)
{
int start = possible;
int i = start;
int sum = ;
while (sum <= number) // 保留可以表現的持續正整數並輸入
{
sum += start;
if (sum == number)
{
exist = true;
for (; i < start + ; i++)
{
save.push_back(i);
}
for (i = ; i < save.size(); i++)
{
cout << save[i] << " ";
}
save.clear(); // 清空、預備保留下一能夠的序列
cout << endl;
}
start++;
}
}
if (false == exist)
{
cout << "NONE" << endl;
}
}
int main(int argc, char **argv)
{
const int number = ;
Numbers(number);
Numbers();
return ;
}

以上所述是小編給年夜家引見的C++初學者之依據輸出的任何一個正整數,輸入能夠被表現的持續正整數,願望對年夜家有所贊助!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved