本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** *****
时间: 2023-11-10 15:03:13 浏览: 124
好的,以下是程序实现:
```python
def print_diamond(n):
if n % 2 == 0:
n += 1
for i in range(n):
if i <= n // 2:
print(" " * (n // 2 - i) + "*" * (2 * i + 1))
else:
print(" " * (i - n // 2) + "*" * (2 * (n - i) - 1))
print_diamond(17)
```
输出结果为:
```
*
***
*****
*******
*********
*******
*****
***
*
```
相关问题
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** *****
以下是一个将给定符号打印成沙漏形状的Python程序:
```python
def print_sandglass(n):
# 打印上半部分
for i in range(n, 0, -2):
print(" " * ((n - i) // 2) + "*" * i)
# 打印中间部分
print(" " * ((n - 1) // 2) + "*")
# 打印下半部分
for i in range(3, n+1, 2):
print(" " * ((n - i) // 2) + "*" * i)
# 测试
n = 17
print_sandglass(n)
```
输出结果为:
```
*****
***
*
***
*****
```
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
```
*****
***
*
***
*****
```
输入格式:
输入在一行中给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的符号阵列,然后在此基础上按照题目要求打印沙漏。
输入样例:
19 *
输出样例:
*****
*****
*****
***
***
*
***
***
*****
*****
```python
n,s=map(str,input().split())
n=int(n)
i=1
while i*(i+1)<=n:
i+=2 #最大i
j=i-2 #最大j j+2是沙漏的高度,沿用之前的j
while j>=1:#第一部分
print(' '*(i-j),end='')
print(s*j)
j-=2
j+=2
while j<=i:
print(' '*(i-j),end='')
print(s*j)
j+=2
print(n-(i-2)*(i-1))#剩余的字符数量
```
### C++ 代码
```cpp
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int n, i = 1, j = 1;
char c;
cin >> n >> c;
while (i * i + 1 < n) i += 2;
j = (n - i * i + 1) / 2; // 计算出第二部分沙漏的半高度,下同
for (int k = i; k >= 1; k -= 2) { // 第一部分
for (int t = 1; t < i - k + 1; t += 2) cout << " ";
for (int t = 1; t <= k; t++) cout << c;
cout << endl;
}
for (int k = 3; k <= i; k += 2) { // 第二部分
for (int t = 1; t < i - k + 1; t += 2) cout << " ";
for (int t = 1; t <= k; t++) cout << c;
cout << endl;
}
cout << n - i * i + 1 << endl; // 第三部分,直接输出即可
return 0;
}
```
注意:有可能最后一个沙漏的底部不能正好放得下两个,这个时候直接输出剩下的 个字符即可,跟沙漏之间不用加空行。如下:
```python
n,s=map(str,input().split())
n=int(n)
i=1
while i*i<=n:
i+=2 #最大i
i-=2 #恢复 i 的值
j=i # j 初始值是沙漏中间那个字符的行号 j+2是沙漏的高度
while j>=1: #第一部分
print(' '*(i-j),end='')
print(s*j)
j-=2
j+=4
while j<=i: #第三部分
print(' '*(i-j),end='')
print(s*j)
j+=2
print(n-(i+2)**2+1)#第二部分,直接计算出即可
```
阅读全文