二重循环:利用等差数列,输出图形

利用二重循环输出图形
上面第三个题目就是要输出的图型
可以先观察图形的变化规律,从前两个图形可以看出,这是一个等差数数列,等差数列的公式为:
y=id+x y=x-id;

在这里插入图片描述在这里插入图片描述

//注意我们使用的等差数列公式:y=i*d+x      y=x-i*d;
//下面输出第一个图形
//注意第一个图形的规律,是等差为1的等差数列,一共有五行,
//用第一行数值代入求出x   1=i*1+x => x=0,下面开始写代码

//外循环控制行数,内循环控制列数,
for(int i = 1; i <= 5; i++){
	//下面输出*
	for(int j = 1;j <=i ; j++ ){
		System.out.print("*");
	}
	//每次输出完一行*后要换行
	System.out.println();
}

//下面输出第二个图形
//第二个图形与第一个图形相反
//规律是:等差为1的递减等差数列
//利用第一行已知数据,求出x, 5=x-1*1 => x=6 => y=6-i
for(int i = 1; i <= 5 ; i++){
	//j控制输出*的个数
	for(int j = 1; j <= 6-i ; j++){
		System.out.print("*");
	}
	System.out.println();
}

//下面输出第三个图形
//观察一下,第三个图形有什么规律
//是一个金字塔的形状,仔细观察可以看成是两个图形拼接成的
//只不过第一个图形输出的是空格,图形和第一个我一样
//空格是等差为1的递减等差数列,4 3 2 1 0,借鉴第二个图形的y=5-i
//第二个就是金字塔图形,输出规律是以等差为2的等差数列
//1 3 5 7 9
//求出*的x:1=1*2+x => x=-1 => y=i*2-1

for(int i = 1; i <= 5; i++ ){
	for(int j= 1;j <= 5-i){
	//先输出空格
		System.out.print(" ");
	}
	System.out.println();
	//再输出*
	for(int j =1; j <= 2*i-1; j++){
	System.out.print("*");
	}
	System.out.println();
}


//第四个图形
//第四个图形就是第三个图形倒过来
//先输出空格 规律以等差为1的递增等差数列是:0 1 2 3 4
//0=1*1+x => y=i-1
//再输出*
//*的规律是以等差为2的递减等差数列:9 7 5 3 1
//9=x-1*2 =>y=11-2*i
for(int i = 1; i <=5 ;i++ ){
	for(int j = 1; j <=i-1; j++){
	System.out.print(" ");
	}
	System.out.println();
	for(int j = 1; j <= 11-2*i ; j++){
		System.out.print("*");
	}
	System.out.println();
}


//第五个图形 菱形
//这个图形出现了新的变化,一共9行,先增后减
//可以用绝对值来解决这个问题
//还是看成两个图形
//第一个空格图形,先减后增,前四行递减,后四行递增
//i取值-4-3-2-1 0 1 2 3 4
//      4 3 2 1 0 1 2 3 4 
//y=x+|i*d| => y=|i*d|
//第二个*图形,先增后减,前四行递增,后四行递减
//i取值-4-3-2-1 0 1 2 3 4
//      1 3 5 7 9 7 5 3 1
//从0开始理解套公式
//y=x-|-4*2| => y=9-|2*d|  
//行数从-4开始
for(int i = -4; i <= 4; i++){ 
 	//列数从1开始,由公式控制长度
	for(int j = 1;j<=Math.abs(i);j++){
		System.out.print(" ");
	}
	System.out.println();
	for(int j = 1; j <= 9-2*Math.abs(i);j++){
		System.out.print("*");	
	}
	System.out.println();
}

//第六个图形  沙漏
//看成两个图形,
//空格图形,共有9行,先增后减
//i取值-4-3-2-1 0 1 2 3 4 
//		0 1 2 3 4 3 2 1 0
//看下半个图形以等差为1的递减等差数列
//4=x-0*1 =>y=4-|i|
//*图形,先减后增
//i取值-4-3-2-1 0 1 2 3 4
// 	   9 7 5 3 1 3 5 7 9
//下半个图形以等差为2的递增等差数列
//1=x+2*0 => y=1+|2*i|

for(int i = -4;i <= 4;i++){
	for(int  j = 1; j <=4-Math.abs(i);j++){
		System.out.print(" ");
	}
	System.out.println();
	for(int j = 1; j <=1+2*Math.abs(i);j++){
		System.out.print("*");
	}
	System.out.println();
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值