星号沙漏

康个题先

傻帽看到鼠标繁忙的时候是一个沙漏符号,正好大家都在学\(C\)++,你的任务就是帮他编一个程序打印一个沙漏符号。
输入\(5\)及打印

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

分析与解答

我们先打上部分,及从\(x\)开始,每次循环\(x\)-=\(2\)

for(register int i=1;i<=n/2+1;i++){
	for(register int j=1;j<i;j++) cout<<' ';
	for(register int j=x;j>=1;j--) cout<<'*';
	cout<<endl;x-=2;
}	x=3;

最后在中间输出一个星号
再打下部分的,及从\(3\)开始每次循环依次加\(2\)

for(register int i=n/2+2;i<=n;i++){
	for(register int j=0;j<n-i;j++) cout<<' ';
	for(register int j=0;j<x;j++) cout<<'*';
	cout<<endl;x+=2;

}

代码

#include<bits/stdc++.h>
//#pragma GCC optimize (3)
using namespace std;
inline int read(){	//无聊的快读
    int s=0,w=1;
    char c=getchar();
    while(!isdigit(c)) w=-1,c=getchar();
    while(isdigit(c)) s=s*10+(c^48),c=getchar();
    return s*w;
}
//快写被出题人干掉了 
int main()
{
	int n=read(),x=n;
	for(register int i=1;i<=n/2+1;i++){
		for(register int j=1;j<i;j++) cout<<' ';
		for(register int j=x;j>=1;j--) cout<<'*';
		cout<<endl;x-=2;
	}	x=3;
	for(register int i=n/2+2;i<=n;i++){
		for(register int j=0;j<n-i;j++) cout<<' ';
		for(register int j=0;j<x;j++) cout<<'*';
		cout<<endl;x+=2;
	}
    return 0;
}
/*
*****
 ***
  *
 ***
*****
*/

posted @ 2022-09-30 19:18  Euouae  阅读(54)  评论(0编辑  收藏  举报