请教解题思路,打印出星号三角形等形状的思路。

qiucanghuai 2009-11-17 05:33:00
说来让大家见笑了,本来跟着老师的思路走着走着,可是总会跟不上节奏。
打印出如 :

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


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

这样之类的思路该如何呢?我不是来求代码的,我是想知道碰到这样的题目该如何去思考。
for的嵌套绕得让我头晕···





...全文
1060 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
selooloo 2009-11-18
  • 打赏
  • 举报
回复
用直角坐标系可以打印各种图形

三角形
#include <stdio.h>
#define N 10
int main(void)
{
int x,y;

for(y=0;y<=N;y++)
{
for(x=-N;x<=N;x++)
{
if(x<=y && x>=-y)
printf("*");
else
printf(" ");
}
printf("\n");}
getchar();
return 0;
}

平行四边形
#include <stdio.h>
#define N 10
int main(void)
{
int x,y;

for(y=0;y<=N;y++)
{
for(x=-N;x<=N;x++)
{
if(x>=-y && x<=-y+N)
printf("*");
else
printf(" ");
}
printf("\n");}
getchar();
return 0;
}

另一种平行四边形
#include <stdio.h>
#define N 10
int main(void)
{
int x,y;

for(y=0;y<=N;y++)
{
for(x=N/2;x<=N;x++)
{
if(x>=y && x<=y+5)
printf("*");
else
printf(" ");
}
printf("\n");}
getchar();
return 0;
}
飞天御剑流 2009-11-18
  • 打赏
  • 举报
回复
2005年的时候很喜欢玩这些东西,力求一行代码就把图形打印出来!
ylwdi 2009-11-18
  • 打赏
  • 举报
回复
群号89228908,欢迎C语言技术爱好者(至少懂C语言基础)加入,请看完要求再加,要求:每个进来的人在每两个星期内至少解决或建议一个别人提出的问题;且至少提出一个实质性的技术问题或代码。两个星期到期之前把自己解决和提出的详细记录复制到一个文本文档里,大小不能超过500KB(目前暂时要求的大小限制),然后把文本文档上传到群空间供群主们检查,群成员也可以下载别人的记录供自己学习。这样做的目的大家都明白!!!
请看完要求,非诚勿加!!!
yangxxxxxx66 2009-11-18
  • 打赏
  • 举报
回复
強烈支持5樓
nasa4836 2009-11-18
  • 打赏
  • 举报
回复
*
***
*****
***
*
我写过这个程序.要求输入数字和图案.结果输出钻石图案.如上是输入:5 *
下面是我当时的思路:
第一行空2白.在第3列打星,星数是1
第二行空1白,在第2列打星,星数是3
第三行空0白,在第1列打星,星数是5
第四行空1白,在第2列打星,星数是3
第五行空2白,在第3列打星,星数是1

前3行: 星数S跟行数i关系是s=2i-1.则易得空格数N是(5-S)/2= (6-2i)/2
最后两行看似不符合这个规律.得再找.但考虑对称性,可以以中间一行为基准.只需对上面式子做修改.注意到中间一行星数是输入的数字,与它相隔一行的上下两行星数要减少2,所以易得行数为i的星数为s = 5- 2*|i-3|.所以空格数N是 N=|5 - s| /2 = |i-3|.

这样规律就推出来.写两个循环.一个循环行数.一个循环列数.就可以实现了.

其他图形同样找一两个次数少时的图形来分析.也可以容易推出规律.





hecha 2009-11-17
  • 打赏
  • 举报
回复
//   *
// ***
// *****
//
// 输出这个图形就是先输出几个空格, 再输出几个*
// 第 0 行: 3 1
// 第 1 行: 2 3
// 第 2 行: 1 5
// 第 i 行: 3-i i*2+1
//
// 写成循环:
for (int i = 0; i < 3; ++i)
{
// 3-i 个空格
for (int k = 0; k < 3 - i; ++k)
printf(" ");
// i*2+1 个*
for (int k = 0; k < i * 2 + 1; ++k)
printf("*");
// 还有一个换行
printf("\n");
}
qiucanghuai 2009-11-17
  • 打赏
  • 举报
回复
谢谢各位哈··目前正在调试中,我试着自己做出。
gx168853 2009-11-17
  • 打赏
  • 举报
回复
1 #include<stdio.h>
main()
{
int i,j,k;
for(i=1;i<=4;i++)
{
if(i<=2)
{
printf(" ");
for(j=1;j<=2*i-1;j++) printf("*");
}
else
for(j=1;j<=2*i-1;j++) printf("*");
printf("\n");
}
}
2 #include<stdio.h>
main()
{
int i,j,k;
for(i=1;i<=5;i++)
{
if(i-2>=1&&i-2<=2)
{
printf(" ");
printf("*****");
}
else
if(i-2>2)
{
printf(" ");
printf("*****");
}
else
printf("*****");
printf("\n");
}
}
呵呵呵,代码丑陋了点儿,不好意思!!俺也是初学者
yueyucanyang 2009-11-17
  • 打赏
  • 举报
回复
我觉得主要是找规律,把规律总结出一个可量化的公式,然后编程、调试
liuy572 2009-11-17
  • 打赏
  • 举报
回复
这个很简单
你只要用printf语句输出空格与*就是了
但你要控制好输入的个数
以前我做的时候是用for语句
楼主可以试试
个人觉得比较简单
qiucanghuai 2009-11-17
  • 打赏
  • 举报
回复
谢谢3楼哈。
=,= 5楼的···· 呵呵 还是感谢了 不过我要是的FOR的思路 ..
regerfe 2009-11-17
  • 打赏
  • 举报
回复
楼上的,你们都想复杂了。程序员应追求最简单的代码。

比如第一题,应该这么写:
printf(" *\n");
printf(" ***\n");
printf("*****\n");
printf("*******\n");

这就行了。让for见鬼去吧,计算机会很感谢你的。
fengzuiye 2009-11-17
  • 打赏
  • 举报
回复
for(i=1; i <=n; i++){ //从1行到4行
for(j=1; j <=n-i; j++) printf(" "); //打印左端的空格
for(j=1; j <=2*i-1; j++) printf("*"); //打印*
printf("\n"); //换行
}

不好意思,写错了点。。
fengzuiye 2009-11-17
  • 打赏
  • 举报
回复
这样的题目需要你去找规律,对于左端的空格数量和*数量,去找和循环变量i的关系。
比如说三角形(n行的)
for(i=1; i<=n; i++){ //从1行到4行
for(j=1; j<n; j++) printf(" "); //打印左端的空格
for(j=1; j<=2*i-1; j++) printf("*"); //打印*
printf("\n"); //换行
}
qiucanghuai 2009-11-17
  • 打赏
  • 举报
回复
谢谢楼上,办法不错。

VC6的调试不大会用,还要再学学。

就是..嵌套和 类似i<=j-2;i++等等 绕不过来 应该是提做的太少 没具备编程思维
ziplj 2009-11-17
  • 打赏
  • 举报
回复
单步调试

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧