用java打印菱形

来源:互联网 发布:mac high sierra 更新 编辑:程序博客网 时间:2024/05/16 10:31

一 个for做了一件事情,虽然我们的菱形复杂得多,但我们认真在纸上划划分析一下,就不难发现规律:从第一行到第5行,星号得数目一直在增加,而到了第6行 却开始减少。而且星号和两边的空格减少都是有规律可循的。再分析一下,我们要打印每 行星号前面的空格不难,打印后面的空格却麻烦,但我们可以通过打印前面的空格和控 制好星号的数目来完成菱形的打印(忽略每行星号后的空格),眉头一皱,计上心来:) 完成这个任务分两步:一是打印前5行,用两个for来控制星号和空格;二是打印后4行, 同样是用两个for来控制星号和空格。一共是6个for! 进一步缕清思路,在前5行,i from 1 to 5(用来控制行),j from 4 to 0(用来控制 空格,因为要先打印空格),k from 1 to 9(用来控制星号,变化规律是从1到9);再来写后面的4行:m from 1 to 4,n from 1 to 4,o from 7 to 1。再求精:前5行,分 析变化规律:


i                j             k
1              4             1
2              3             3
3              2             5
4              1             7
5              0             9

                

我们要找,当i=1时,j=4,k=1......再用数学的方法思考:使当i等于1的时候j等于4, i等于2的时候j等于3......i等于5的时候,j等于0。比如我们可以用2n+2=4(n=1),下个呢?因为我们要找递归关系(所以习惯用n )2n+2-3=3(n=2),2n+2-6=2(n=3),2n+2-9=1 (n=4),2n+2-12=0(n=5)满足了i和j的关系!再发现:(2n+2)后的每个数都是有规律的! 0,3,6,9,12!都是3的倍数!我们终于找到了递归关系:(2n+2)-3(n-1),n属于[1, 5],化简得5-n。以此类推,完成了所有的递归关系!你疑惑地问,我不用2n+2找递归 关系,用n+3找,或者用3n+1,或用4n,你可以试试,结果都是一样地,那用哪个最方便?当然是(n+3)-2(n-1) n属于[1,5],记住咱们地推论了!费那么大工夫,终于完成 了如下的源程序:

main()
{
     int i,j,k,m,n,o;

     clrscr();

     for(i=1;i<=5;i++){             
        for(j=1;j<=5-i;j++)
            printf(" ");
        for(k=1;k<=2*i-1;k++)
            printf("*");
        printf("/n");}/*打印前5行*/

     for(m=1;m<=4;m++){
        for(n=1;n<=m;n++)
            printf(" ");
        for(o=1;o<=9-2*m;o++)
            printf("*");
        printf("/n");}/*打印后4行*/

}


我们看变量的定义多了,去掉m,n,o:

#include <stdio.h>
//#include <conio.h>
main()
{
     int i,j,k;

     //clrscr();

     for(i=1;i<=5;i++){
        for(j=1;j<=5-i;j++)
            printf(" ");
        for(k=1;k<=2*i-1;k++)
            printf("*");
        printf("/n");}

     for(i=1;i<=4;i++){
        for(j=1;j<=i;j++)
            printf(" ");
        for(k=1;k<=9-2*i;k++)
            printf("*");
        printf("/n");}

}

=========================java版的========================================

package ch5;

import javax.swing.JOptionPane;

public class diamond{
   public static void main(String args[]){
   for(int row=1; row<=5; row++)
        {for (int space=5-row; space>0; space--)//行和空格之间的关系为space=5-row
        System.out.print(' ');
        for(int star=1; star<=2*row-1; star++)//星和空格之间的关系为star=2*row-1
        System.out.print('*');
        System.out.print('\n');
        }
   for(int row=4; row>=1; row--)
        {for(int space=5-row; space>0; space--)
        System.out.print(' ');
        for(int star=1; star<=2*row-1; star++)
        System.out.print('*');
        System.out.print('\n');
        }      
   }
}

原创粉丝点击