-
2021-09-19 10:50:49
问题描述
当n=5时,沙漏图形如输出样例所示。请观察并明确沙漏图形的规律。要求输入一个整数n,输出满足规律的沙漏图形。
输入:
测试数据有多组,处理到文件尾。每组测试输入一个整数n(1<n<20)。
输出:
对于每组测试,输出满足规律的沙漏图形。
输入样例:
5
输出样例:
*********
*******
*****
***
*
***
*****
*******
*********代码:
#include<stdio.h> int main(){ int i,j,k,n,l,s,c; while(scanf("%d",&n)==1){ l=2*n-1; s=l; c=0; for(j=0;j<n;j++){ for(k=c;k>0;k--){ printf(" "); } c++; for(i=0;i<s;i++){ printf("*"); } printf("\n"); s=s-2; } s=s+2; for(j=0;j<n-1;j++){ for(k=c-2;k>0;k--){ printf(" "); } c--; s=s+2; for(i=0;i<s;i++){ printf("*"); } printf("\n"); } } return 0; }
更多相关内容 -
PTA打印沙漏L1-002打印沙漏
2020-01-11 17:26:55个人的想法,通俗易懂。 -
C 语言 打印沙漏
2018-05-07 17:36:01PAT 测试题 打印沙漏 但是不知道为什么我的提交就是无效 -
打印沙漏-C语言代码
2020-05-22 16:31:27课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的 -
PTA打印沙漏(Python3)
2021-01-21 17:03:31PTA自测题打印沙漏 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行... -
打印沙漏 (20 分)PTA
2018-10-22 17:49:19L1-002 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;... -
打印沙漏的流程图--适合初学者理解编程思维
2022-01-09 14:07:34若有问题请及时指正,感谢 -
打印沙漏的简单程序
2017-07-14 14:58:16这是某考试认证网站中的考题 -
7-82 打印沙漏.c
2020-04-16 16:26:13本题目来自pta练习题哦! -
python打印沙漏
2022-03-09 09:33:15开始时间0919 ...所以我试着把打印沙漏拆解成几个小问题 计算能用掉几个✳ 排序✳ 计算剩下的✳ 这用到了等差数列。 等差数列第n个项的公式为:Xn=a+d(n-1) 排除1后 我们的数列为6 10 14…… 故Xn=6+4(n-1开始时间0919
我一开始想到的是def shalou(n): if n = 1: used = 1 result = n-used print(result) else: used = n-1
但我编不下去了。所以我试着把打印沙漏拆解成几个小问题
- 计算能用掉几个✳
- 排序✳
- 计算剩下的✳
这用到了等差数列。
等差数列第n个项的公式为:Xn=a+d(n-1)
排除1后 我们的数列为6 10 14……
故Xn=6+4(n-1)假设我们有22个✳,排除1,得到21,这是我们要用的✳的总数
此处需要用到等差数列求和公式
等差数列求和,即形为a a+d a+2d的数列……求和
S=a+……+(a+(n-1)d)
S=(a+(n-1)d)+……+a
2S=(2a+(n-1)d)+……+(2a+(n-1)d)
一共用n项,2S=(2a+(n-1)d)*n得到公式S=(2a+(n-1)d)*n/2
我想要求项数n,一开始想要用S求,但我算不出来。其实(Xn-X1)/d+1即可。
那么代入21,我们发现,虽然知道X1=6,但是不知道Xn是多少,也不知道n是多少。
我们知道什么呢?
Xn=6+4(n-1)
n=(Xn-6)/4+1
不过我们遗憾地发现,这两条式子是一样的。我们还知道21=等差数列求和+没用上的✳,即:
21=(12+4(n-1))*n/2+result
但我们也不知道result是多少。过程中我想到但现在好像不知道怎么用上的东西:
求商和余数需要用到divmod
divmod(被除数,除数)=(商,余数)
可以把结果存起来给d,那么d[0]=商,d[1]=余数现在是1017,写烦了,先休息一下。
刚刚在看别人写的代码就是这个
试着分析了一下#a 给出一共正整数a[0]和一个符号a[1] 那么我们要先用split分开 a=input().split() #这是符号 result=[a[1]] #这是我们有几个符号参与排序 只有一个那行被我们忽略了 n=int(a[0])-1 #不是一个符号的第一行有三个符号 i=3 #开始排了 while n>0: #在指定地方aka最前面insert三个符号 result.insert(0,i*a[1]) #在末尾添加三个符号 result.append(i*a[1]) #这里的n是什么呢?有几个符号参与排序 #n=n-2i 但是i是什么呢?六个 意思是排序三个的两行一共用掉了六个 n -=2*i #新的一行里符号数量比上一行多两个 i +=2 #由此 我们构成了一共循环 n会一直用到用完为止 #k是什么呢? k=0 #如果我们刚好把n用完之后停下来了 if n is 0: #result0的长度是什么呢? #如果是五个符号 那就是5 我们发现 这刚好和一共有多少行 是完全一致的! m=len(result[0]) #对于每一个result里的东西 这句话是什么意思呢? #每一行? for i in result: #k等于这一行的长度?累加?可能是想算 在所有的行里 一共用了多少个符号 k +=len(i) #%s,表示格式化一个对象为字符 #这句话完全看不懂 print("%s%s"%(" "*((m-len(i))//2),i))
看了四十五分钟 实在有点晕了 先休息一下。
-
打印沙漏Java
2022-03-20 14:43:51首先确定你输入的数字n可以打出几行 " * ",(n+1)/2是你打印上半部分需要的个数(上边的倒三角)然后写出一个循环判断上边倒三角有几行,每行有(1,3,5,7......)然后通过循环打印 import java.util.Scanner; ...首先确定你输入的数字n可以打出几行 " * ",(n+1)/2是你打印上半部分需要的个数(上边的倒三角)然后写出一个循环判断上边倒三角有几行,每行有(1,3,5,7......)然后通过循环打印
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int a = input.nextInt();//符号个数
char c = input.next().charAt(0);
int i, j, n, m, s = 0, k = 0;
int b = (a + 1) / 2;
for (i = 1, j = 1; ; i = i + 2, j++) {
s += i;
if (s > b) {
n = j - 1;//倒三角的行数
s=s-i;
break;
}
}for (i = 2 * n - 1; i > 0; i = i - 2, k++) {
for (m = 0; m < k; m++) {
System.out.print(" ");
}
for (j = 2 * i - 1; j > 0; j = j - 2) {
System.out.print(c);
}
System.out.println();
}
for(i=1;i<n;i++,k--){
for(m=0;m<k-2;m++)
System.out.print(" ");
for(j=0;j<i*2+1;j=j+1)
{
System.out.print(c);
}
System.out.println();
}
System.out.println(a-2*s+1);
}
}
-
7-4 打印沙漏 (20 分)
2022-04-04 19:23:32本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先...7-4 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。输入样例:
19 *
输出样例:
2
#include <iostream> #include<stdio.h> using namespace std; int last(int n) { if(n<7) return n-1; else { int i=2; int sum=0,sum1; while(1) { sum1=(i-1)*(6+6+(i-2)*4)/2; sum=i*(6+6+(i-1)*4)/2; if(sum+1>n) return n-sum1-1; else i++; } } } int getlevel(int n) { if(n<7&&n>=1) return 1; else { int i=2; int sum=0,sum1; while(1) { sum=i*(6+6+(i-1)*4)/2+1; if(sum>n) return i; else i++; } } } void print(int n,char s) { for(int i=n;i>=1;i--) { for(int j=n-i;j>=1;j--) cout<<' '; for(int j=i*2-1;j>=1;j--) cout<<s; cout<<endl; } for(int i=2;i<=n;i++) { for(int j=n-i;j>=1;j--) cout<<' '; for(int j=i*2-1;j>=1;j--) cout<<s; cout<<endl; } } int main() { int n; char s; cin>>n>>s; print(getlevel(n),s); cout<<last(n); return 0; }
202204041923一
-
沙漏(打印沙漏)
2021-11-25 15:27:54所谓沙漏,即我们通过一个特殊符号打印出一个沙漏形状的东西。而这个沙漏,它每行符号的个数都为奇数,每行中心符号对齐,相邻两排符号个数相差2,符号数先每行减少2个,减到只剩1个时,再每行增加2个,对应首尾符号... -
打印沙漏 C语言
2022-02-09 15:41:49本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数... -
打印沙漏编程总结
2021-03-11 13:04:127-1 打印沙漏 (20 分)本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印*****************所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2... -
PAT乙级 1027 打印沙漏 (20 分)
2022-02-02 23:06:071027 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;... -
【PTA】打印沙漏
2021-05-23 04:13:04本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印*****************所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小...