注册 登录
编程论坛 C++教室

编写一个菱形,只用到一次' '和一个' *',有需要的同志可以参考!

鶄鵅 发布于 2010-04-05 16:22, 845 次点击
我在网上看过一些,算法都差不多是这样的:
程序代码:
#include <iostream>
using namespace std;

void main( )
{
      int x, y, k;
      int n;
      cout<<"enter n = ";
      cin>>n;
      for(x=1; x<=n; x++){
         for(k=0; k<=n-x; k++)
             printf(" ");
          for(y=1; y<=x; y++)
              printf("%2c",'*'); //等价于  cout<<" *";
       cout<<endl;
      }
      for(x=n-1; x>=1; x--) {
          for(k=0; k<=n-x; k++)
              printf(" ");
          for(y=1; y<=x; y++)
               printf("%2c",'*');   //等价于  cout<<" *";
          cout<<endl;
      }
}


下面跟大家分享一下我的算法 (在整个程序中只出现过一次‘ ’ 和  一次‘*’):
程序代码:
#include <iostream>
using namespace std;

void main( )
{
     int n;
     int i, j;
     cout<<"enter n = ";
     cin>>n;
     for(i=1; i<2*n; i++){
          for(j=1; j<2*n; j++){
               if((i+j>=n+1 && i+j<=3*n-1) && (1-n<=i-j && i-j<=n-1))
                     putchar('*');
               else
                     putchar(' ');
          }
          putchar('\n');
     }

 }






[ 本帖最后由 鶄鵅 于 2010-4-5 20:35 编辑 ]
9 回复
#2
one_june2010-04-05 17:38
#include<iostream>
#include<string>
using namespace std;
int main()
{
    for(int n;cin>>n;)
    {
        for(int i=1;i<=n;++i)
        cout<<string(n-i,' ')+string(2*i-1,'*')+'\n';
        for(int i=1;i<=n-1;++i)
        cout<<string(i,' ')+string(2*n-1-2*i,'*')+'\n';
    }
}

比较简单的方法...

[ 本帖最后由 one_june 于 2010-4-5 17:42 编辑 ]
#3
鶄鵅2010-04-05 17:41
好,互相学习!
#4
玩出来的代码2010-04-05 18:25
我也来写个程序玩玩。。

程序代码:
#include<stdio.h>
void fun(int i)
{
    if(i>0)
    {
        putchar('*');
        fun(i-1);
    }
    else return ;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1,j=n;i<=n || (j>0,j--);i++)
    {
        printf("%*.s",i<=n?n-i:n-j,"");
        i<=n?fun(2*i-1):fun(2*j-1);
        putchar('\n');
    }
    return 0;
}
#5
鶄鵅2010-04-05 19:07
回复 4楼 玩出来的代码
嗯,我们是直接学C++的,但我也看过一些C的程序,
可是我至今还不知道“%*.s”是什么意思,只知道“%s”!
麻烦给我解释一些“%*.s”好吗?
#6
hahayezhe2010-04-05 19:20
* 假读符
#7
鶄鵅2010-04-05 20:22
回复 6楼 hahayezhe
什么叫假读符啊?
#8
月光3212010-04-06 19:22
假读符有啥用啊???
#9
玩出来的代码2010-04-06 21:10
printf("%*.*s\n",m,n,ch);
前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应m,n.
#10
鶄鵅2010-04-07 11:54
回复 9楼 玩出来的代码
哦,谢谢
1