精华内容
下载资源
问答
  • 2022-02-09 15:41:49

    题目

    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

    *****
     ***
      *
     ***
    *****
    

    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:

    输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

    输出格式:

    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    输入样例:

    19 *
    

    输出样例:

    *****
     ***
      *
     ***
    *****
    2

    碎碎念念

    首先要知道要打印多少层。

    观察发现,第一个有一层就一个,第二个有三层有7个,第三个有五层有17个。

    把图案分成上下两部分,先求带尖的,根据等差数列相应公式,公差为2,第n个应该是2n-1,总数应该是n的平方,加上另一部分,总数应该是2*n*n-1,对于第n个图案,应该有2n-1层。

    知道了层数,下面就是两个循环嵌套,外循环算层数,内循环算每一层的个数。

    代码

    #include<stdio.h>
    int main()
    {
    	int num=1,sum,i,j,floor=1,rest;//num存第几个,floor存相应的层数。 
    	char sign;
    	scanf("%d %c",&sum,&sign);
    	while(2*num*num-1<=sum)
    	num++;
    	num--;//因为跳出循环的时候已经是大于sum了,所以退一步回去。 
    	floor=2*num-1;
    	rest=sum-2*num*num+1;
    	for(i=0;i<=floor/2;i++)//打印图案的上半部分。 
    	{
    		for(j=0;j<i;j++)
    		printf(" ");
    		for(j=i;j<floor-i;j++)
    		printf("%c",sign);
    		if(j==floor-i)
    		printf("\n");
    	}
    	for(i=floor/2-1;i>=0;i--)//打印图案的下半部分。 
    	{
    		for(j=0;j<i;j++)
    		printf(" ");
    		for(j=i;j<floor-i;j++)
    		printf("%c",sign);
    		if(j==floor-i)
    		printf("\n");
    	}
    	printf("%d",rest);
    }

    更多相关内容
  • 打印沙漏-C语言代码

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

    2018-05-07 17:36:01
    PAT 测试题 打印沙漏 但是不知道为什么我的提交就是无效
  • 1027 打印沙漏C语言) 【题目描述】 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行...

    1027 打印沙漏(C语言)

    【题目描述】
    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:
    输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
    输出格式:
    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
    【代码实现】

    #include <stdio.h>
    int main()
        {int n,i,s=0,j,k;char ch;
         scanf("%d %c",&n,&ch);
         for(i=1;;i+=2)
             {s+=2*i;//i表示不重复的情况下行数的最大值,s-1表示需要的字符数 
              if(s-1==n) break;//正好用完所有的字符 
              if(s-1>n) {s-=2*i;i-=2;break;}}//字符有多余 
         //printf("i=%d,s=%d\n",i,s-1);
         for(j=i;j>1;j-=2)//打印上半部分(不包括只有1个字符的所在行) 
             {
              for(k=0;k<(i-j)/2;k++) printf(" ");
              for(k=0;k<j;k++) printf("%c",ch);
              //for(k=0;k<(i-j)/2;k++) printf(" ");//每一行最后一个字符的右侧无空格
              printf("\n");
             }
         for(j=1;j<=i;j+=2)//打印下半部分 
             {
              for(k=0;k<(i-j)/2;k++) printf(" ");
              for(k=0;k<j;k++) printf("%c",ch);
              //for(k=0;k<(i-j)/2;k++) printf(" ");//每一行最后一个字符的右侧无空格
              printf("\n");
             }
         printf("%d",n-s+1);//打印剩余的字符数 
         return 0;
        }
    
    展开全文
  • 1027 打印沙漏C语言详解)

    千次阅读 多人点赞 2020-03-21 20:08:40
    比较让我疑惑的是为什么构不成沙漏也要打印出一个符号*不然有测试点通不过。 正文 题目 本题要求你写个程序把给定的符号打印沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓...

    前言

    这个题目思路不是很复杂但是我也写了好久(技术菜),关键在于编写“漏斗”的时候的技巧,左边留空格右边不用留就行了。
    比较让我疑惑的是为什么构不成沙漏也要打印出一个符号*不然有测试点通不过。

    正文

    题目

    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

    *****
     ***
      *
     ***
    *****
    

    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:

    输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

    输出格式:

    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    输入样例:

    19 *
    

    输出样例:

    *****
     ***
      *
     ***
    *****
    2
    

    假设count为最长一排星星个数;
    打印空格规律
    上半部分:空格数 k=行数-1
    下半部分:空格数 k=count-行数

    *****   1
     ***    2   上半部分
      *     3
    --------
     ***    4
    *****   5   下半部分
    

    代码:

    #include <stdio.h>
    int print(int count,char c);
    int main(){
    	int num,sum=0;
    	int i,flag,count,k;
    	char c;
    	scanf("%d %c",&num,&c);
    	/* 当输入的数大于等于7时*/
        if(num>=7){
    	for(i=3;sum<=num;i+=2){//保证打印的*小于输入的数
        	flag=i;//可以容纳第一行的*个数 
    		count=i;
    		sum=0;
        	while(count>0){
        		sum=sum+count;
        		count-=2;
    		}
    		sum=2*sum-1;//*个数
    	}
         print(flag-2,c);//打印漏斗,要减去2
    	 k=num-sum+flag*2;//剩余的*个数
    	 printf("%d",k);
    }
    	/* 当输入的数小于7*/
       else{
    		printf("%c\n",c);//要打印出一颗星星,不然会报错
            printf("%d",num-1);
    	}
    } 
    /*打印漏斗*/
    int print(int count,char c){//count 为第一排的个数,c 为输出的字符
    	int i=0;
    	int j=0 ;
    	int k,count;
    	/*上半部分  */
    	for(j=0;j<(count+1)/2;j++){
    		k=j;//用于储存左边空格的数量
    		for(i=0;i<count-j;i++){//算上空格‘ ’每次比上一行少输出1个用count-j
    			if(k){   
    				   printf(" ");//先打印左边的空格
    				   k--;  	
    			}
    			else
    				printf("%c",c);//再打印字符*
    		}  
    		putchar('\n');
    	}
    	/*下半部分  */
    	for(j;j<count;j++){//打印剩余
    		  k=count-j-1;//空格数量,因为上半部分j从0开始 所以再-1
    		for(i=0;i<j+1;i++){
    			if(k){
    			    printf(" ");
    				k--;
    			}
    			else
    			    printf("%c",c);
    		}
    		if(j<count)//最后一行不用打印\n
    		  putchar('\n');
    	}
    } 
    

    最后,来来来,膜拜一下大佬的代码:

    #include <stdio.h>
    void print(char ch, int count) {
    	while (count-- > 0)putchar(ch);
    }	//print(ch,c):打印ch字符c遍。
    void printLine(char ch, int j, int width) {
    	print(' ', j);	//j为空格数量
    	print(ch, width - 2*j);	//width一行总宽度  - 两侧的空格数量2j
    	putchar('\n');	//换行(右侧的空格不需要也不允许真正地输出)
    }	//打印沙漏专用,ch为待打印字符,h为上三角层数
    int main(){
    	int n, n0 = 1;	//n ch即为题目输入。n0是沙漏实际打印字符个数
    	char ch;	//样例中ch=='*'
    	int h = 1;	//沙漏上三角层数
    	scanf("%d %c", &n, &ch);
    	while (1){	//迭代法试出
    		int temp = n0 + 2 * (2 * h + 1);	//新增加首末两行的ch数量
    		if (temp <= n) {		//没有超出n
    			n0 = temp;	h++;
    		}else break;	//否则超出则跳出
    	}
    	int j, row = 2 * h - 1;	//j为空格数量,row为总行数==首末行ch数量
    	for (j = 0; j<h; j++) {		//打印上半部分(含中间)
    		printLine(ch, j, row);
    	}
    	for (j = h-2; j >= 0; j--){	//打印下半部分(不含中间)
    		printLine(ch, j, row);
    	}
    	printf("%d", n - n0);
    	return 0;
    }
    

    还有更简单的:我什么时候才能写出这样的代码555
    https://blog.csdn.net/q839219286/article/details/90513915

    展开全文
  • 上周用PHP做了一个,(传送门:https://www.mmuaa.com/post-25.html),两者思路有区别,PHP的那个对于输入"1 *"无法打印正确的结果(所以说有很多bug。。。)C代码:#include"stdio.h"intused(int);intline(int);void.....
  • (C语言)打印沙漏---pta

    2022-04-06 19:59:10
    本题要求你写个程序把给定的符号打印沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数...
  • c语言-打印沙漏

    2021-12-06 16:32:57
    C语言-打印沙漏 - 题目要求 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。 给定任意N个符号,不一定能正好...
  • 1027 打印沙漏 C语言

    2020-12-14 19:04:04
    本题要求你写个程序把给定的符号打印沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先...
  • L1-002 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻...
  • L1-002打印沙漏C语言

    2022-01-29 22:30:01
    打印沙漏
  • c语言打印沙漏

    万次阅读 多人点赞 2018-10-20 10:49:10
    这个代码刚学C语言的时候写的,我记得当时的题目要求是 输入一个数n和一个符号c 然后问用n个符号c打印出一个沙漏还差多少或者是多多少 下面还有其他两个直接打印沙漏的方法 #include #include int main() { ...
  • L1-002 打印沙漏 (20分) 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数...
  • } int printSandGlass( int n, char c ){ //经过数学推导知沙漏所需要的字符数:2n^2 + 4n + 1 int rest;//剩余的字符数 int num = 0; while(n >= 2*num*num + 4*num + 1) { num ++; } num--; // int max...
  • L1-002打印沙漏题解(C语言版)

    万次阅读 多人点赞 2018-01-31 12:30:21
    打印沙漏讲解: 一、题意:给一个数字n和一个字符c,输出由n个c组成的沙漏并输出剩下没用掉的符号数。 二、注意事项: ①缓存区的注意:输入的时候可能会用到scanf(“%c”,&c);来读取字符,这样做很危险,一不...
  • 要求打印出的沙漏能用掉尽可能多的符号。 输入格式: 输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。 输出格式: 首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。...
  • @PAT-乙级-打印沙漏c语言 #include <stdio.h> int main(int argc, char *argv[]) { int num = 0, sheng = 0,n = 0, line = 0, i = 0, j = 0; char p; if (scanf("%d %c", &num, &p)){};//直接写...
  • 本题要求你写个程序把给定的符号打印沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数...
  • 本题要求你写个程序把给定的符号打印沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数...
  • 【PTA】打印沙漏

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

    千次阅读 多人点赞 2019-05-24 15:36:45
    L1-002打印沙漏(20分) 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 794
精华内容 317
关键字:

打印沙漏c语言

友情链接: onenand_regs.rar