zoukankan      html  css  js  c++  java
  • 【IT面试题003】将一个正整数写成若干个整数之和

    将一个正整数写成若干个整数之和,打印出所有的可能,每种和输出时,加数升序排列

    #include <iostream>
    
    #include <string>
    #include <vector>
    using namespace std;
    
    
    vector<int> solution;
    int gNum; //目前的加数个数
    int gCurSum; //当前和
    int gN; //目标和
    int gSolCount;
    void PrintSolution()
    {
    	for (int i = 0;i < gNum;i++)
    	{
    		cout << solution[i] << " ";
    	}
    	cout << endl;
    }
    void Go()
    {
    	if (gCurSum == gN)
    	{
    		gSolCount ++;
    		PrintSolution();
    		return;
    	}
    	int lastAdd = 1; // 从1开始
    	if (gNum > 0)
    	{
    		lastAdd = solution[gNum - 1];
    	}
    	if (lastAdd > (gN - gCurSum))  //如果最小的可行加数都大于剩余和,就不要继续了
    	{
    		return;
    	}
    	for (int adder = lastAdd;adder <= (gN - gCurSum); adder++)
    	{
    		gCurSum += adder;
    		gNum ++;
    		if (solution.size() >= gNum)
    		{
    			solution[gNum - 1] = adder;
    		}else{
    			solution.push_back(adder);
    		}
    		Go();
    		//回溯
    		gCurSum -= adder; 
    		gNum --;
    	}
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	gN = 10;
    	gSolCount = 0;
    	gCurSum = gNum = 0;
    	Go();
    	cout << gSolCount << endl;
    }
  • 相关阅读:
    SEO
    Hack写法
    文学漫步
    [BZOJ4565] [Haoi2016] 字符合并
    [bzoj 3123][Sdoi2013]森林
    [UVA 12633] Super Rooks on Chessboard FFT+计数
    [HDU4609] 3-idiots FFT+计数
    [bzoj4554] [Tjoi2016&Heoi2016]游戏
    [bzoj4556] [Tjoi2016&Heoi2016]字符串
    [bzoj4552][Tjoi2016&Heoi2016]排序
  • 原文地址:https://www.cnblogs.com/speedmancs/p/2072745.html
Copyright © 2011-2022 走看看