00-自测1. 打印沙漏(20)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Cpp2088671660/article/details/45749475

写了两个版本的沙漏,提交上去都是第三个测试点错,也不知道为什么。可能是输出格式也可能是其他的什么,自己太笨了,想了好久。

#include <iostream>
#include <vector>
#include <numeric>
#include <ctime>
using namespace  std;

int main()
{
	size_t N;
	char a;
	while (cin >> N >> a)
	{
		size_t sum = 0;
		size_t T = 0;
		vector<size_t> nvec;
		if (N < 1)
			return 0;
		for (int i = 3; (T = sum + i) * 2 < N; i += 2)
		{
			sum = T;
			nvec.push_back(i);
		}

		if (nvec.empty())
		{
			if (N >= 3)
			{
				for (int i = 3; i > 0; --i)
				{
					cout << a << endl;
				}
				int Temp = N - 3;
				cout << Temp << endl;
			}
			else if (N >= 1)
			{
				cout << a << endl;
				cout << N - 1 << endl;
			}
			return 0;
		}
		size_t Max = nvec.size();
		for (int i = Max; i > 0; --i)
		{
			int Temp = nvec.at(i - 1);

			if (i != Max)
				for (int k = (nvec.back() - Temp) / 2; k > 0; --k)
					cout << " ";

			for (int j = Temp; j > 0; --j)
				cout << a;

			cout << endl;
		}
		for (int i = (nvec.back() - 1) / 2; i > 0; --i)
			cout << " ";
		cout << a << endl;

		for (int i = 0; i < Max; ++i)
		{
			int Temp = nvec.at(i);

			if (i != Max)
				for (int k = (nvec.back() - Temp) / 2; k > 0; --k)
					cout << " ";

			for (int j = Temp; j > 0; --j)
				cout << a;

			cout << endl;
		}
		int count = N - (accumulate(nvec.cbegin(), nvec.cend(), 0)) * 2 - 1;
		if (count)
			cout << count << endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main()
{
	int N = 0;
	char a = '*';
	cin >> N >> a;
	int b = (N - 1) / 2;//获得上部数
	if (b < 7 && N < 7)
	{
		if (b >= 3 || N >= 3)
		{
			for (int i = 0; i < 3; ++i)
				cout << a << endl;
			int T = N - 3;
				cout << N - 3 << endl;
		}
		else if (b >= 1 || N >= 1)
		{
			cout << a << endl;
			int T = N - 1;
				cout << T << endl;
		}
		else
			cout << N << endl;
	}
	else
	{
		int count = 1;
		int sum = 0;
		int T = b;
		for (; (T = T - 3 - 2 * count) >= 3;++count)//获得打印次数
			b = T;

		for (int i = count; i > 0; --i)
		{
			for (int j = count - i ; j > 0; --j)
				cout << " ";
			for (int j = 3 + (i - 1) * 2; j > 0; --j)
			{
				cout << a;
				++sum;
			}
			cout << endl;
		}

		for (int i = 0; i <= count; ++i)
		{
			for (int j = count - i; j > 0; --j)
				cout << " ";
			for (int j = 3 + (i - 1) * 2; j > 0; --j)
			{
				++sum;
				cout << a;
			}
			cout << endl;
		}
		sum = N - sum;
		cout << sum << endl;
	}
	return 0;
}


猜你喜欢

转载自blog.csdn.net/Cpp2088671660/article/details/45749475