星号沙漏
康个题先
傻帽看到鼠标繁忙的时候是一个沙漏符号,正好大家都在学\(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;
}
/*
*****
***
*
***
*****
*/