using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
private static int Num = 10;
static void Main(string[] args)
{
List<int> l = new List<int>();
l.Add(0);
int loopCount = 0;
int outputCount = 0;
int lastRemove = 0;
while (true)
{
if (Sum(l) < Num)
{
if (lastRemove == 0)
{
l.Add(l[l.Count - 1] + 1);
}
else
{
l.Add(lastRemove + 1);
lastRemove = 0;
}
}
if (Sum(l) == Num)
{
Console.WriteLine(Output(l));
outputCount++;
l.RemoveAt(l.Count - 1);
lastRemove = l[l.Count - 1];//
l.RemoveAt(l.Count - 1);
}
if (Sum(l) > Num)
{
l.RemoveAt(l.Count - 1);
l.RemoveAt(l.Count - 1);
if (Sum(l) > 0)
{
int x = Num - Sum(l);
Console.WriteLine(Output(l) + "+" + x.ToString());
outputCount++;
}
else
{
break;
}
lastRemove = l[l.Count - 1];
l.RemoveAt(l.Count - 1);
}
loopCount++;
}
Console.WriteLine("loop count:" + loopCount);
Console.WriteLine("output count:" + outputCount);
Console.Read();
}
static int Sum(List<int> l)
{
int sum = 0;
for (int i = 0; i < l.Count; i++)
{
sum += l[i];
}
return sum;
}
static string Output(List<int> l)
{
string output = "";
for (int i = 1; i < l.Count; i++)
{
output += l[i].ToString() + "+";
}
return output.Substring(0, output.Length - 1);
}
}
}