Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 2791|回復: 3

求解~抽籤

[複製鏈接]
發表於 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);
}

發表於 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 的值
 樓主| 發表於 2018-5-5 16:06:50 | 顯示全部樓層
筆記....自學中,還沒學到陣列,等學到再研究。
發表於 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-3-29 09:07 , Processed in 0.194249 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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