有趣的路燈問題——按規律列印圖形
路燈問題
人的天職在勇於探索真理。 ——哥白尼(波蘭)
國慶長假期間,看到一條路上的路燈非常有趣,有紅黃藍三種顏色,依次排成一條線狀。不禁聯想到有個廠子的筆試題裡面也有類似的場景,描述是這樣子的,一條長長的公路上,分別掛有紅黃藍三種顏色的裝飾燈,排列規則如圖所示:(這裡用三角形代表紅燈,用正方形代表黃燈,用圓形代表藍燈)
假設公路無限長,燈按照以上這種規律排列下去,要求程式計算每輸入一個整數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++; //每列印一個三角形計數器加1
if(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++; //每列印一個三角形計數器加1
if(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}
讀者朋友們可嘗試對路燈的變數新增多維控制,在計算機裡面,每個維度都可以單獨計算求值,除非是兩個關聯影響的變數。路燈問題實際上,是按照規律列印圖案的基礎問題的現實場景,按照一定的規律輸出圖案,可自行嘗試編碼實現。
相關文章
- Java的圖形列印Java
- CAD有趣圖形的繪製
- CAD列印圖形教程
- 一個有趣的鎖問題
- 一個有趣的this指向問題
- 圖片跨域規律探尋跨域
- 圖形程式設計問題記錄程式設計
- 自己整理的關於windows圖形介面的問題Windows
- [專題]網路 IO 高階篇:一次有趣的 Docker 網路問題排查原創Docker
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- 有趣的 events_statements_current 表問題
- 使用Hibernate、JPA、Lombok遇到的有趣問題Lombok
- 問題 F: 開燈問題(第二講)
- Touring cities (找規律 哈密爾頓迴路)
- 解決zabbix圖形化中文亂碼問題
- css3有趣的transform形變CSSS3ORM
- ireport列印pdf字型問題
- React 高德地圖 進京證 路線規劃 問題小記React地圖
- vue 關於圖片路徑的問題Vue
- 多路口交通燈問題
- 計算出大小有什麼走勢圖規律
- 規律技巧|怎麼追回網路彩票被騙的錢R
- 律所管理系統能解決律師事務所存在的這些問題
- Go記憶體架構,一個有趣的問題Go記憶體架構
- laravel上傳圖片路徑問題Laravel
- 樹形問題選講
- 打表找規律
- 不規則圖形背景排版高階技巧 -- 酷炫的六邊形網格背景圖
- 如何探索事物的客觀規律?
- linux 安裝字型解決JAVA圖形中文亂碼問題LinuxJava
- VS開發C++Dll的一些有趣問題C++
- 王道 C語言教程 Week1 2. 列印如下圖形:C語言
- winform的bindingNavigator上按鈕顯示問題ORM
- 如何解決iPhone按鈕卡住的問題iPhone
- webpack:url-loader 圖片路徑問題Web
- leedcode-單詞規律
- 三、凸透鏡成像規律
- LeetCode-單詞規律LeetCode