写一道算法题“打印沙漏”
好家伙,写一道算法题
1.题目如下:
2.分析:
在此处我们以20为例子
将其分为两块,上三角和下三角
以中间层一个为零层,则每层的层数(x)与“星号”(y)的数量关系为y=2x+1;
在上三角区域中,这是一个等差数列,那么可以得出,上三角的“星号”总数为层数的平方
下三角区域中,数量为上三角“星号”总数“减去1
求余数的公式为:”输入的星星数量“-2*n*n+1
那么最关键的层数如何获得?
我们将”20“除以”2“后开方,再向下求整,就得到了层数(即2层)
再从代码结构上去看
________________________________
( 一个求出层数的算法 )
for(控制层数){
for(){ 打印空格 }
for(){ 打印"星号" }
}
________________________________
大致代码如下:
#include<stdio.h> #include<math.h> int main(){ int i,j,a,b,m; double n; char ch; scanf("%lf %c",&n,&ch); a=n; n=n/2; n=floor(sqrt(n)); //求出层数 for(i=n;i>0;i--){ //打印上三角 for(j=0;j<n-i;j++){ printf(" "); } for(j=0;j<2*i-1;j++){ printf("%c",ch); } printf("\n"); } for(i=1;i<n;i++){ //打印下三角 for(j=n-1;j>i;j--){ printf(" "); } for(j=0;j<2*i+1;j++){ printf("%c",ch); } printf("\n"); } b=a-2*n*n+1; printf("%d",b); printf("\n"); return 0; }
但还是出了些许问题
问题待改正
分类:
算法基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具