版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}