Robofun 機器人論壇

標題: 求解~抽籤 [打印本頁]

作者: firelsas    時間: 2018-5-5 15:16
標題: 求解~抽籤
目的:籤筒有42支籤,號碼1~6,7組,
        例如1號被選取7次後就不在出現
目前進度:學會亂數,但部會設限

int sw=A0;
int a;
boolean swstatus=true;

void setup(){
pinMode(sw,INPUT);
digitalWrite(sw,HIGH);
Serial.begin(115200);
}

void loop(){
if(digitalRead(sw)==HIGH && swstatus==true){
  a=random(1,6);
  Serial.println(a);
  swstatus=false;
}
else if (digitalRead(sw)==LOW && swstatus==false){
  swstatus=true;
}
delay(200);
}


作者: 超新手    時間: 2018-5-5 16:01
1. 簡單方法
宣告一個6bytes的陣列, 初始值都是7
如果抽到某個數字,就看該陣列值是否為0
如果是0,就重抽,否則就把值減 1


2. 複雜方法
宣告一個42bytes的陣列
初始值 前 7個是 1,再來 7 個是 2...最後7個是 6
第一次取 0~41 的亂數,例如2,得到陣列值為1
再拿陣列尾端41的值和抽中的值交換,
所以陣列2的值變成6
第二次取 0~40 的亂數,例如39,得到陣列值為6
再拿陣列尾端40的值和抽中的值交換,
所以陣列39的值變成6
第三次取 0~39 的亂數,
再拿陣列尾端39的值和抽中的值交換
第四次取 0~38 的亂數,
再拿陣列尾端38的值和抽中的值換
........
第42次直接取陣列0 的值

作者: firelsas    時間: 2018-5-5 16:06
筆記....自學中,還沒學到陣列,等學到再研究。
作者: 超新手    時間: 2018-5-5 16:12
本帖最後由 超新手 於 2018-5-5 20:00 編輯

或是用洗牌方法
宣告一個 42 bytes陣列
初始值 7個1,7個2...7個6
先選2個 0到 41的亂數,把這兩個值當指標的
陣列值互換, 依此方式連續做個幾百次,
就算洗牌完成
然後依次輸出陣列第 0筆到第41筆的值即可




歡迎光臨 Robofun 機器人論壇 (https://www.robofun.net/forum/) Powered by Discuz! X3.2