首页 > 软件 > c++打印一个沙漏。 输入一个整数n,符号的行数(n是大于1的奇数) 输出 使用“*”打印沙漏符号

c++打印一个沙漏。 输入一个整数n,符号的行数(n是大于1的奇数) 输出 使用“*”打印沙漏符号

软件 2023-06-25

用青少年信息学奥林匹克竞赛培训教材(小学)编程

1: var n,a,b:integer; begin read(n); for a:=((n+1) div 2) downto 1 do begin for b:=1 to (a*2-1) do write('*'); writeln; end; for a:=2 to (n+1 div 2) do begin for b:=1 to a do write('*'); writeln; end; write(chr(8); end. 2: var t,s:string; x,y:array[1..100] of char; a:integer; ch:char; begin read(s);

C++题目 打印漏斗

  首先找一下规律:

  发现没有,其实这个漏斗是一个等差数列:5 3 1 3 5.公差为2,首项为1,但是是对称的。

  那么题目和代码中给定的n就是和了。我们想知道对于一个给定的n,我们在尾项(k)为多少,或者说有多少项((k/2+1)*2,也就是后面的h*2-1)的时候能够使得和area(代码中理解为面积)能够满足小于n,并且使得这个k最大,所以一开始从3开始,一直求一个最大的k(尾项),使得和能够满足。但是要注意的是当判断出这个尾项k的时候,k已经不满足了!前一个k才是我们想要的,所以要k-2.

  至于h,代码中理解为行(hang,汉语拼音,我认为)。我就理解为项数,比如说h=3,那么就是有3行:1 3 5.但是要打印漏斗状,所以要对称,还要再打印一行。

  或许语言组织不明确,可以接着问。也可以说一下你的思路,按照你的思路给你捋一遍。

c语言:打印沙漏求大神讲解意思

#include
intmain()
{intsum,b,i,q,t,k,j,g,N;
charc;
sum=1;b=1;
scanf("%d%c",&N,&c);
for(i=1;sum<=N;i++)
{ b=b+2;//3+5+...
sum=sum+b*2;}//当sum大于N时结束循环,所需要的sum应为sum-2*b
i=i-1;
q=i;//保存沙漏的下半部分有多少行
sum=sum-2*b;//最大的沙漏所需要的字符数
k=0;
for(j=i;j>=1;j--)//后面没什么好说的,就是正常的分成上下两部分,然后找行数和每行空格、字符数的关系
{for(g=1;g<=k;g++)
printf("");
for(t=1;t<=2*j-1;t++)
printf("%c",c);
printf("\n");
k++;
}
k=k-2;
for(j=2;j<=q;j++)
{for(g=1;g<=k;g++)
printf("");
for(t=1;t<=2*j-1;t++)
printf("%c",c);
printf("\n");
k--;}
printf("%d",N-sum);
return0;
}

pascal沙漏

var n,i,j:integer; begin read(n); for i:=1 to 2*n-1 do 就是有几行,读入的N begin write(' ':10+abs(n-i)); 输出的时候空开一点 for j:=1 to 2*(n-abs(n-i))-1 do write('*'); writeln; end; end.

标签:CC++ 编程 信息技术 C(编程语言) 编程语言

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18