当前位置: 代码迷 >> C语言 >> [求助]菜鸟求助!
  详细解决方案

[求助]菜鸟求助!

热度:261   发布时间:2006-09-06 11:44:09.0
以下是引用nuciewth在2006-9-5 11:27:58的发言:

#include<stdio.h>
#define Max 5
int main()
{
int i,j;
for(i=0;i<=Max;i++)
{
for(j=0;j<=2*Max;j++)
{
if(i==Max||i==Max-j||(j-Max)==i)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return(0);
}


确实好贴,
对这个数学公式能不能详细解释,让大家涨涨见识


----------------解决方案--------------------------------------------------------
比如按这个图画在直角坐标系上,当然这里应该在图倒过来画在第一象限中(现实中的图也是这样,只不过此时的y轴是向下的).你会发现*分布在y=x+Max或者在y=Max-x或是在y=Max上,这里的x,y对应就是i,j.
这里说数学公式可能不太贴切,反正我遇到这样的题目就是这样解的,找出*分布的规律,用(y,x)函数表示出来.有了这个,写程序就不难了
----------------解决方案--------------------------------------------------------


Y
|
| y=x+max
|
max |*********** y=max
| * *
| * *
| * *
|_____*__________________ X
max
y=-x+max

原来是这样应用了直线方程。
自己想的,还是哪个教的?
----------------解决方案--------------------------------------------------------

如果用数组写,要怎么写


----------------解决方案--------------------------------------------------------
以下是引用hjx812在2006-9-6 14:13:43的发言:

如果用数组写,要怎么写

输出的同时存储就OK了


----------------解决方案--------------------------------------------------------
#include <stdio.h>
#define ROW 6
#define COL 11
int main(void){
char arr[ROW][COL];
int i,j,t;
for(i=0,t=0;i<ROW;i++,t++){
for(j=0;j<COL;j++){

if(j==COL/2+t||j==COL/2-t)
arr[i][j]='*';
else if(i==ROW-1){

for(j=0;j<COL;j++)
arr[i][j]='*';
}
else
arr[i][j]=' ';
}
printf("\n");
}
for(i=0;i<ROW;i++){
for(j=0;j<COL;j++)
printf("%c",arr[i][j]);
printf("\n");
}
return 0;

}

或者多用几个printf();
----------------解决方案--------------------------------------------------------
谢谢
----------------解决方案--------------------------------------------------------
用数组不是浪费空间吗

for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
if(i==COL/2-j||i==Col/2+j||i==ROW-1)
{
arr[i][j]='*';
}
else
{
arr[i][j]=' ';
}
}
}
----------------解决方案--------------------------------------------------------
  相关解决方案