精华内容
下载资源
问答
  • 打印沙漏
    千次阅读
    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;
    }

    更多相关内容
  • 个人的想法,通俗易懂。
  • C 语言 打印沙漏

    2018-05-07 17:36:01
    PAT 测试题 打印沙漏 但是不知道为什么我的提交就是无效
  • 打印沙漏-C语言代码

    2020-05-22 16:31:27
    课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的
  • PTA打印沙漏(Python3)

    2021-01-21 17:03:31
    PTA自测题打印沙漏 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行...
  • 打印沙漏 (20 分)PTA

    2018-10-22 17:49:19
    L1-002 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;...
  • 若有问题请及时指正,感谢
  • 打印沙漏的简单程序

    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
    

    但我编不下去了。所以我试着把打印沙漏拆解成几个小问题

    1. 计算能用掉几个✳
    2. 排序✳
    3. 计算剩下的✳

    这用到了等差数列。
    等差数列第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:12
    7-1 打印沙漏 (20 分)本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印*****************所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2...
  • 1027 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;...
  • 【PTA】打印沙漏

    2021-05-23 04:13:04
    本题要求你写个程序把给定的符号打印沙漏的形状。例如给定17个“*”,要求按下列格式打印*****************所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,122
精华内容 1,648
关键字:

打印沙漏