路灯问题

人的天职在勇于探索真理。  ——哥白尼(波兰)

国庆长假期间,看到一条路上的路灯非常有趣,有红黄蓝三种颜色,依次排成一条线状。不禁联想到有个厂子的笔试题里面也有类似的场景,描述是这样子的,一条长长的公路上,分别挂有红黄蓝三种颜色的装饰灯,排列规则如图所示:(这里用三角形代表红灯,用正方形代表黄灯,用圆形代表蓝灯)

假设公路无限长,灯按照以上这种规律排列下去,要求程序计算每输入一个整数n,就能输出第n个位置的路灯颜色(图案)。这样的场景下,如果用数学的方法来解决,肯定要涉及到数列的求和,计算起来还是比较费劲的,用计算机帮我们实现计算,那就相当的快了。

随手写了个程序,跑了一下,能行:

package math;import org.junit.Test;/*** 该类为按规律输出图形的实现* @author jsyuger* 有以下规律图形:* △ □ ○ △ △ □ □ ○ ○ △ △ △ □ □ □ ○ ○ ○ ......* 输出第n个图形的图案*/
public class PrintRegular {/*** 输入第n个位置,返回第n个位置的图案* @param n* @return */public String printRegular(int n) {int m = 0 ; /** 用于图形的总计数 **/String type = "△" ; /** 初始化返回的图案类型 **/for(int i=1 ; i<=n && m<=n ; i++) {for(int a=1;a<=i;a++) { //用于循环打印三角形//System.out.print("△"); //用于测试m++; //每打印一个三角形计数器加1if(m==n) { //当达到第n个的时候,返回图案类型,跳出循环type = "△";break;}    }for(int b=1;b<=i;b++) {//System.out.print("□"); //用于测试m++;if(m==n) {type = "□";break;}}for(int c=1;c<=i;c++) {//System.out.print("○"); //用于测试m++;if(m==n) {type = "○";break;}}}return type ;}@Test/*** 测试方法:输出前18个图案*/public void test() {for(int i=1;i<=18;i++)System.out.print(printRegular(i));}
}

控制台输出结果:

△□○△△□□○○△△△□□□○○○


以上路灯问题是简单一维控制位置,即路灯只有形状(或颜色)这一单一变量的控制。拓展一下,假设该公路上的灯是按照下面的方式进行排列的,即按照三角形、正方形、圆形顺序,颜色则按照红黄蓝绿的顺序来排列:

此时,路灯则有两个变量来控制,即颜色和形状。要求程序输出第n个位置的图案以及颜色

随手改了下上面的程序,跑了一下,也能行:

package math;import java.util.HashMap;
import java.util.Map;import org.junit.Test;/*** 该类为按规律输出图形的实现* @author jsyuger* 有以下规律图形:* △ □ ○ △ △ □ □ ○ ○ △ △ △ □ □ □ ○ ○ ○ ......* 输出第n个图形的图案*/
public class PrintRegular {/*** 输入第n个位置,返回第n个位置的图案和颜色* @param n* @return */public Map<String,String> printRegular(int n) {Map<String,String> hashMap =new HashMap<String,String>(); //用于存放结果(形状->颜色)int m = 0 ; /** 用于图形的总计数 **/String type = "△" ; /** 初始化返回的图案类型 **/String color = "red"; /** 初始化返回的图案颜色 **/for(int i=1 ; i<=n && m<=n ; i++) {for(int a=1;a<=i;a++) { //用于循环打印三角形m++; //每打印一个三角形计数器加1if(m==n) { //当达到第n个的时候,返回图案类型,跳出循环type = "△";break;} }for(int b=1;b<=i;b++) {m++;if(m==n) {type = "□";break;}}for(int c=1;c<=i;c++) {m++;if(m==n) {type = "○";break;}}}//获取颜色int x = n%4 ;switch(x) {case(0) : color = "green" ;break;case(1) : color = "red";break;case(2) : color = "yellow";break;case(3) : color = "blue";break;}//封装结果hashMap.put(type, color);return hashMap ;}@Test/*** 测试方法:输出第9个图案以及颜色*/public void test() {System.out.print(printRegular(9));}
}

控制台输出:

{○=red}


读者朋友们可尝试对路灯的变量添加多维控制,在计算机里面,每个维度都可以单独计算求值,除非是两个关联影响的变量。路灯问题实际上,是按照规律打印图案的基础问题的现实场景,按照一定的规律输出图案,可自行尝试编码实现。

有趣的路灯问题——按规律打印图形相关推荐

  1. 使用嵌套循环打印图形

    循环嵌套 循环里面可以嵌套循环,今天我们就用双层for循环打印图形和做出杨辉三角.打印图形时,把图形看做行,列.外层循环来控制行,内层控制列.如果是有星星还有空格的类型.模板就是 外层 for(int ...

  2. C语言打印图形小妙招

    在c语言中我们常用使用空格和*来打印各种各样图形,像爱心 还有飞机 那么像这种打印图形一般有两种方法,一种是直接打印法, 另一种是函数打印法 直接打印法顾名思义就是使用printf函数直接打印图形,例 ...

  3. 利用for循环打印图形

    利用for循环打印图形 利用for循环打印图形时,我们需要记住外层循环列,内层循环行,然后们需要做的不外乎是找到它们循环的规律罢了. 打印矩形图形 打印: ***** ***** ***** **** ...

  4. python用双重循环输出菱形_Python 使用双重循环打印图形菱形操作

    如下所示: a = int(input("请输入菱形行数:")) m = a #空格 d = a #倒三角 for i in range(1, a + 1): # 先打印正三角 p ...

  5. python中for循环打印菱形_Python 使用双重循环打印图形菱形操作

    如下所示: a = int(input("请输入菱形行数:")) m = a #空格 d = a #倒三角 for i in range(1, a + 1): # 先打印正三角 p ...

  6. C语言中打印图形问题

    C语言中打印图形问题 上半部分规律:星号数目是行数的二倍减一,空格数是上半部分总行数减去它所在的行号: 下半部分规律:从下半部分开始算起,每行星号数是2line-2n-1,空格数目为它所在的行号 #d ...

  7. 习题4-9 打印菱形图案(打印图形)

    本题要求编写程序,打印一个高度为n的.由"*"组成的正菱形图案. 输入格式: 输入在一行中给出一个正的奇数n. 输出格式: 输出由n行星号"*"组成的菱形,如样 ...

  8. python用while打印菱形_Python 使用双重循环打印图形菱形操作

    如下所示: a = int(input("请输入菱形行数:")) m = a #空格 d = a #倒三角 for i in range(1, a + 1): # 先打印正三角 p ...

  9. (蓝桥杯第五届B组)史丰收速算 打印图形(代码填空)

    史丰收速算 史丰收速算法的革命性贡献是:从高位算起,预测进位.不需要九九表,彻底颠覆了传统手算! 速算的核心基础是:1位数乘以多位数的乘法. 其中,乘以7是最复杂的,就以它为例. 因为,1/7 是个循 ...

最新文章

  1. C#调用windows api的要点
  2. mysql 官方镜像_运行官方mysql 镜像
  3. pycharm 开发app_windows及mac下开发Excel, python+xlwings开发环境配置
  4. linux创建了目录复制不存在,Linux:复制并创建目标目录,如果它不存在
  5. java bufferedrandomaccessfile_java 读写操作大文件 BufferedReader和RandomAccessFile
  6. php的注入点,Php注入点构造代码
  7. ubuntu 搭建 php 环境
  8. 如何设置微信小程序地图控件满屏
  9. 设置“文件共享”,方便两台主机共享文件
  10. CAN总线波特率的计算方法
  11. RFID电力设备智能巡检管理解决方案
  12. 服务器开机日志文件,大芒果启动WOW服务器 提示日志文件找不到怎么办
  13. java timer 销毁_java.util.Timer用法须知
  14. 怎么查看服务器的详细信息,服务器查看详细信息
  15. python自动化运维脚本(仅供参考)
  16. 一文解析推特上最常见的加密骗局
  17. EventBus的基本使用
  18. 4.1二维曲线绘制(plot与fplot)
  19. Flutter 弹幕组件hi_barrage封装
  20. 一文读懂有关Tree的前世今生

热门文章

  1. 基恩士XG-XvisionEditor离线仿真
  2. 关于android的webview打开淘宝天猫链接问题
  3. 考研数据结构之队列(3.3)——练习题之设计一个循环队列,用front和rear分别作为队头和队尾指针,另外用一个标志tag表示队列是空还是不空来设计队列的结构和相关基本运算算法(C表示)
  4. 五种以上linux的发行版本,Linux 各发行版本简介
  5. win10计算机怎么连接网络,如何创建宽带连接_win10电脑宽带连接怎么创建 - 驱动管家...
  6. java 与或非_JAVA 或与非运算符 与()、或(|)、异或(^)
  7. Google奥运会logo
  8. 3DMAX入门教程,这样还担心学不会?
  9. 目标检测和感受野的总结和想法
  10. 用python浪漫告白_Python实现浪漫表白