专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

点击我的世界显示启动更新失败_java

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 20:21:41       共计:3579 浏览

如何用c语言for循环打出一个空心菱形?

画图画图(不画图难以会意)。下面是一个草图??(找了个在线白板画的,漂亮吧~^(* ̄(oo) ̄)^)。

如图所示,假设要画一个规格为2a*2b的◇。a,b分别为对应方向的中心位置。不难看出,程序一共需要打印2b+1行,2a+1列(因为第0行0列也是需要打印的,但是程序是从0开始计数的,因此最后的行列下标就是2a和2b,2a+1和2b+1是数量)。

程序打印通常会使用空格和*作为打印菱形的字符,由于基本的输出单位是字符(相当于菱形内的所有角的大小是固定的,不论多么大的菱形都是相似的),所以2a和2b会相互制约。我想打印一个10*50的菱形时,当打印到第5行是就已经从横向偏移量为0的位置开始打印了,第6行将会从-1列开始打印,这样打印出的图案将会是一个不完成的菱形,如下图,虚线部分将不会被打印。

程序以行为输出,因此我们不在控制y轴,只通过控制x轴方向的a来控制菱形的大小。我们不妨来归纳一下打印的规则:

第0行需要打印a个空格、打印一个*、换行。

第1行需要打印a-1个空格、打印1个*、打印1个空格、打印1个*、换行。

第2行需要打印a-2个空格、打印1个*、打印3个空格、打印1个*、换行。

第3行需要打印a-3个空格、打印1个*、打印5个空格、打印1个*、换行。

第n行需要打印a-n个空格、打印1个*、打印2n-1个空格、打印1个*、换行。

一直需要打印到n==a。打印0个空格、打印1个*、打印2a-1个空格、打印1个*、换行。

之后开始往回画。

第a+1行需要打印1个空格、打印1个*、打印2a-3个空格、打印1个*、换行。

第a+2行需要打印2个空格、打印1个*、打印2a-5个空格、打印1个*、换行。

第a+m行需要打印m个空格、打印1个*、打印2a-(2m+1)个空格、打印1个*、换行。

当打印到2a-(2m+1)<0[2a-2m<1=>m==a]时,则只直接打印换行,结束程序。

不难计算得出,一共需要打印2a+1行(和上面的2b+1相对应)。

示例如下图,网格里的大点点就是我们需要打印的点:

这样,伪代码基本就出来了:

参数:a 横向的中心点

// 打印上半截

for(n = 0; i <= a; n ++){

// 打印一行内容

for(i = 0; i < a-n; i ++){

print(' ');//打印a-n个空格

}

print('*');//打印1个*

if((2n - 1) < 0){

print('\n');// 未打印空格直接换行

continue;

}

for(i = 0; i < (2n - 1); i ++){

print(' ');//打印2n - 1个空格

}

print('*');// 打印1个*

print('\n');// 换行

}

// 打印下半截

for(m = 1; m <=a; m ++){

for(i = 0; i < m; i ++){

print(' ');// 打印m个空格

}

print('*');// 打印1个*

if(2a-(2m+1) < 0){

print('\n');// 换行

break;// 终止程序

}

for(i = 0; i < 2a-(2m+1); i ++){

print(' ');// 打印2a-(2m+1)个空格

}

print('*');// 打印1个*

print('\n');// 换行

}

以上就思路啦,赶紧去试一试吧~

以上内容只是说明了思路,大家还有什么好方法呢?一起来聊聊吧~

我是一名程序员,更多精彩请关注:空心小窝头

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:别人调用接口之后自己想加一个参数_java | ·下一条:有什么JAVA方面的书籍吗_java

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有