本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”
时间: 2023-05-01 07:05:36 浏览: 90
好的,我可以编写一个程序,把给定的符号打印成沙漏的形状。例如,如果给定17个“*”,程序将打印出以下形状:
*********
*******
*****
***
*
***
*****
*******
*********
相关问题
本题要求你写个程序把给定的符号打印成沙漏的形状。java
下面是一个用Java编写的程序,可以根据给定的符号打印出沙漏的形状。
```java
public class SandglassPattern {
public static void printSandglass(int size, char symbol) {
for (int i = size; i >= 1; i -= 2) {
for (int j = 0; j < (size - i) / 2; j++) {
System.out.print(" ");
}
for (int j = 0; j < i; j++) {
System.out.print(symbol);
}
System.out.println();
}
for (int i = 3; i <= size; i += 2) {
for (int j = 0; j < (size - i) / 2; j++) {
System.out.print(" ");
}
for (int j = 0; j < i; j++) {
System.out.print(symbol);
}
System.out.println();
}
}
public static void main(String[] args) {
int size = 7; // 指定沙漏的大小
char symbol = '*'; // 指定符号
printSandglass(size, symbol);
}
}
```
在上面的程序中,`size`表示沙漏的大小,`symbol`表示打印的符号。程序首先从沙漏的顶部开始打印,每行打印的符号数量递减。然后,打印到沙漏的中间行时,逐行递增符号数量,最后打印到沙漏的底部。
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定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)#第二部分,直接计算出即可
```
阅读全文