S001-AC.cc 562 Bytes
#include <iostream>
#include <cmath>
#include <string>

using namespace std;

void bars(string* array, int lowerLimit, int upperLimit, int n)
{
	array[(upperLimit+lowerLimit)/2].append(n,'*');
	if(lowerLimit == upperLimit)
	{
		return;
	}
	bars(array,lowerLimit,(upperLimit+lowerLimit)/2 - 1,n-1);
	bars(array,(upperLimit+lowerLimit)/2 +1,upperLimit,n-1);
}
		
int main()
{
	int n;
	cin >> n;
	string* array = new string[(int)(pow(2,n) - 1)];
	bars(array,0,pow(2,n) - 2,n);
	for(int i = 0; i < (pow(2,n) - 1); i++)
	{
		cout << array[i] << endl;
	}
	return 0;
}