1.题目描述
按要求输出最大的沙漏形状和没用掉的符号数。
2.解法
将沙漏分为上下两部分分别打印
#include<bits/stdc++.h>
using namespace std;
const int N=30;
int a[N],sum[N];
int i,j,n,id;
char c;
int main(){
a[1]=1,a[2]=6;
for(i=3;i<=25;i++) a[i]=a[i-1]+4;
sum[1]=1;
for(i=2;i<=25;i++) sum[i]=sum[i-1]+a[i];
scanf("%d %c",&n,&c);
for(i=1;i<=25;i++) if(sum[i]>n) break;
id=i-1;
for(i=id;i>=1;i--){
for(j=id-i;j>0;j--) printf(" ");
for(j=0;j<i*2-1;j++) printf("%c",c);
cout<<endl;
}
for(i=2;i<=id;i++){
for(j=id-i;j>0;j--) printf(" ");
for(j=0;j<i*2-1;j++) printf("%c",c);
cout<<endl;
}
printf("%d\n",n-sum[id]);
}
3.总结
数据量并不大,可以预处理出所有规模沙漏需要的字符数
|