Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 3459|回復: 3
打印 上一主題 下一主題

求解~抽籤

[複製鏈接]
跳轉到指定樓層
1#
發表於 2018-5-5 15:16:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
目的:籤筒有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);
}

2#
發表於 2018-5-5 16:01:00 | 只看該作者
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 的值
3#
 樓主| 發表於 2018-5-5 16:06:50 | 只看該作者
筆記....自學中,還沒學到陣列,等學到再研究。
4#
發表於 2018-5-5 16:12:38 | 只看該作者
本帖最後由 超新手 於 2018-5-5 20:00 編輯

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

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-21 21:12 , Processed in 0.138176 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表