当前位置: 代码迷 >> C语言 >> [讨论]寻最简单的算法.
  详细解决方案

[讨论]寻最简单的算法.

热度:215   发布时间:2007-04-22 17:06:49.0


都那样做了..
还谈算法干嘛
----------------解决方案--------------------------------------------------------
#include<stdio.h>
int main()
{
int n,m,i,j;
printf("please input the number of the pyramid!\n");
scanf("%d",&n);
n-=1;
for(m=0;m<=n;m++)
{
for(i=0;i<=n-m;i++)
printf(" ");
for(j=0;j<=2*m;j++)
printf("*");
printf("\n");
}
getch();
return 0;
}

这个是金字塔的代码

至于你想要的你图案的下半部,你就按照我的方法给它进行倒推就可以了

至于算法,呵呵,就请你自己把实际数字带入m,i,j进去看看就知道了

这种题目不难
----------------解决方案--------------------------------------------------------
我和楼上一样.

----------------解决方案--------------------------------------------------------
就是这样了
#include<stdio.h>
void main()
{
int i,j;
clrscr();
for(i=1;i<=4;i++)
{gotoxy(5-i,i);
for(j=1;j<=2*i-1;j++)
printf("*");
}
for(i=1;i<=3;i++)
{
gotoxy(i+1,i+4);
for(j=1;j<=7-2*i;j++)
printf("*");
}
}
----------------解决方案--------------------------------------------------------

(我是用了C++,你自己转换一下吧。算法是一样的)
使用的算法如下

BEGIN:
for(i=1;i<=4;i++) 从第一行到第四行
for(j=1;j<=16-i;j++) 第i行右移的次数(在*的前面有空格,所以要右移)
print space 打印空格

endfor j 结束j的循环

for(k=1;k<=(2*i-1);k++) 输出*的个数
print *; 打印*

endfor k 结束k循环

CR 换行

endfor i 结束i的循环

for(i=1;i<=3;i++) 从倒数第i行到第1行
for(j=1;j<=(i+12);j++) 从第i行右移的次数
print space; 输出空格

endfor j 结束j的循环

for(k=1;k<=(-2*i);k++) 输出*的个数
print * 打印*

endfor k 结束k循环

CR 换行

endfor i 结束i的循环

END

主要是要弄懂算法。。以下的程序仅供参考。

程序代码:

#include <iostream>
using namespace std;

void main()
{
int i,j,k;
for(i+1;i<=4;i++)
{

for(j=1;j<=16;j++)
cout<<\" \";
for(k=1;k<=(2*i-1);k++)
cout<<\"*\";
cout<<endl;
}
for(i=1;i<=3;i++)
{
for(j=1;j<=i+2;j++)
cout<<\" \";
for(k=1;k<=(7-2*i);k++)
cout<<\"*\";

cout<<endl;
}
}

[此贴子已经被作者于2007-4-22 21:41:37编辑过]


----------------解决方案--------------------------------------------------------
以下是引用neverTheSame在2007-4-22 16:10:26的发言:
printf(" *\n");
printf(" ***\n");
printf(" *****\n");
printf("*******\n");
printf(" *****\n");
printf(" ***\n");
printf(" *\n");

puts(" *");
puts(" ***");
puts(" *****");
puts("*******");
puts(" *****");
puts(" ***");
puts(" *");

更快


----------------解决方案--------------------------------------------------------
可以用字符数组,直接初始化,然后printf
----------------解决方案--------------------------------------------------------
谢谢各位大虾啦. 还真不少啊.
----------------解决方案--------------------------------------------------------

#include<stdio.h>
main()
{
char a[]="*******",b[]=" ";
int i,j;

for(i=6,j=0;i>=0;i-=2,j++)
printf("%s%s\n",b+j,a+i);
for(i=2,j=2;i<=6;i+=2,j--)
printf("%s%s\n",b+j,a+i);
getch();
}


----------------解决方案--------------------------------------------------------
楼上的也不错啊
----------------解决方案--------------------------------------------------------
  相关解决方案