for循环有关的金字塔形数字

 题目分析:拿到题目,我们可以看到,位于第几行那么它所在行的第一个数字和最后一个数字,都是它的行数;我以第四行为例,它的数字为:4  3  2  1  2  3  4 我们可以把这串数字当成y的取值-也就是把它看做是值域,那么它的值域就为[-4,4]

然后我们将1所在的x设为是0,则x的数字就为:-3  -2  -1  0  1  2  3  ,也就是说它的定义域为[-3,3],,我们可以看到它的值域所显示的值就是行数的绝对值,我们用Math,abs(),来表示,定义域给的范围则是(行数-1)的绝对值

我们用i来表示行数的话,那么每一行的数就是从-(i-1)开始,到i-1结束;再看它们的空格数再以第四行为例,假定第四行前没有空格数,第一行是3个,第二行2个,第三行1个,也就可以看出,第一行是(4-1)个,第二行是(4-2)个,第三行是(4-3)个,我们可以发现,空格数=总行数-当前行数

import java.util.*;
class demo14{
    public static void main(String[] args){
       Scanner s=new Scanner(System.in);
       System.out.print("请输入数字");
       int n=s.nextInt();
       for(int i=1;i<=n;i++){//行数
           for(int k=1;k<=(n-i);k++){//每一行的空格数
               System.out.print("   ");
           }
           for(int x=-(i-1);x<=i-1;x++){
                System.out.printf("%3d",Math.abs(x)+1);//输出为绝对值
           }
              System.out.println();
           }

       }
      
    }

 

 题目分析:1.先看第一个图形,这是个比较简单的图形,我们会发现每一行都是从1开始,到当前行数为止,第一行,1;第二行,1,2;......我们可以先将每一行的循环写出来(int i=1,i<=j,i++)--我们将n设为当前行数,在写出行数的循环,(j=1,j<=6;j++)

class demo15{
    public static void main(String[] args){
       for(int j=1;j<=6;j++){//行数
          for(int i=1;i<=j;i++){//当前行的数字
              System.out.print(i+" ");
          }
          System.out.println();//打印完行数时换行
       }

2.我们现在看第二个图形,它相比第一个图形能稍难一点,我们会发现它每一行的数字都是从1开始递加的,第一行:1-6,

第二行:1-5,......第六行:1   我们会发现这样一个规律,每一行都是从1开始到7-当前行数结束

 for(int j=1;j<=6;j++){
               for(int i=1;i<=7-j;i++){
                 System.out.print(i+" ");

 3.我们观察这个图形,首先只观察它数字的变化,每一行的数字都是在递减的一直到1结束,在观察,每一行的的数字是从当前行数所代表的数字开始,其次在观察它的空格变化,假定我们认为第六行没有空格数,则第一行是5个空格数,第二行4个,.....第五行1个,我们我可以发现它其实是6-减去当前行数所得的数

for(int j=1;j<=6;j++){//行数
            for(int k=1;k<=Math.abs(j-6);k++){
                System.out.print("  ");
            }
              for(int i=j;i>=1;i--){
              System.out.print(i+" ");
          }
          System.out.println(); 

 4.观察每一行数字的变化,我们会发现每一行的数字都是从1开始,逐步递加的,在观察每一行的末尾数字,第一行:6,第二行:5,......第六行:1我们就可以发现这样一条规律,其实每行数的末尾数字就是7-当前行数;在观察空格的变化,假定从上往下第一行是没有空格数的,第一行:0;第二行:1......一直到第六行:5,空格的变化就是当前行数-1的结果

for(int j=1;j<=6;j++){
            for(int k=1;k<=j-1;k++){
                System.out.print("  ");
            }
              for(int i=1;i<=7-j;i++){
              System.out.print(i+" ");
          }
          System.out.println(); 
       }

题目分析:单看这些数字,我们其实发现不了什么规律的,但是其实当你把这些数字拆开就会发现它们其实都是2的次幂

现在我们看其指数:以第四行为例:数字是1 2  4  8  4   2 1   

                                               它的次幂分别是 0  1  2  3  2  1  0

我们将0  1  2  3  2  1  0当成是y的值,将3所在的x设为0,就可以得到如下的数据:-3 -2 -1 0 1 2 3;假设令0  1  2  3  2  1  0的图像为为g(x),就可以得到它关系x轴对称的图像为-g(x),将-g(x)的最低点向上移就可得到:新的函数图像-g(x)+n;在发现新图像刚好也就是我们得到的x:-3 -2 -1 0 1 2 3的绝对值的图像,就可以得到-g(x)+n=|x|,我们就可以得到g(x)=n-|x|

import java.util.*;
class demo16{
    public static void main(String[] args){
       Scanner s=new Scanner(System.in);
       System.out.print("请输入数字");
       int n=s.nextInt(); 
       for(int i=1;i<=n;i++){
           for(int k=1;k<=n-i;k++){
                System.out.print("    ");
           }
            for(int j=-(i-1);j<=i-1;j++){
                System.out.printf("%4d",(int)Math.pow(2,i-1-Math.abs(j)));
            }
            System.out.println();
       }
    }
}
发布了21 篇原创文章 · 获赞 0 · 访问量 365

猜你喜欢

转载自blog.csdn.net/weixin_44318477/article/details/104257022