次のコードを見てください
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
enum Movement{STAND,WALK,RUN,CRAWL};
Movement state = (Movement)(1+rand()%4);
for(int i=0;i<100;i++)
{
cout << state << endl;
switch(state)
{
case STAND:
cout << "You can walk or crawl" << endl;
while(state==WALK || state==CRAWL){
state = (Movement)(1+rand()%4);}
break;
case WALK:
cout << "You can stand or run" << endl;
while(state==STAND || state==RUN){
state = (Movement)(1+rand()%4);}
break;
case RUN:
cout << "You can walk" << endl;
while(state==WALK){
state = (Movement)(1+rand()%4);}
break;
default:
cout << "You can stand" << endl;
while(state==STAND){
state = (Movement)(1+rand()%4);}
}
}
}
ここにはいくつかのルールがあります。それらを法的移行と呼びましょう
- スタンドから、彼は歩いたりハイハイしたりできます
- ウォークから、彼は立ったり走ったりできます
- ランから、彼は歩くことができます
- クロールから、彼は立つことができます
したがって、ここでは、合法的な遷移をランダムに選択する必要があります。ただし、上記のルールに従う必要があります。例えば「STAND」を選択した場合、次に選択するのは「WALK」か「CRAWL」となります。しかし、ここでわかるように、すべての結果は
2
You can walk
何故ですか?助けてください!
アップデート:
返信で提案されているように、次のコードは do..while ループを使用しています
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
enum Movement{STAND,WALK,RUN,CRAWL};
Movement state = (Movement)(1+rand()%4);
for(int i=0;i<10;i++)
{
cout << state;
if(state==STAND)
{
cout << " STAND is selected" << endl;
}
else if(state==WALK)
{
cout << " WALK is selected" << endl;
}
else if(state==RUN)
{
cout << " RUN is selected" << endl;
}
else if(state==CRAWL)
{
cout << " CRAWL is selected" << endl;
}
switch(state)
{
case STAND:
//cout << "You can walk or crawl" << endl;
do{state = (Movement)(rand()%4);}
while(state==WALK || state==CRAWL);
break;
case WALK:
//cout << "You can stand or run" << endl;
do{state = (Movement)(rand()%4);}
while(state==STAND || state==RUN);
break;
case RUN:
//cout << "You can walk" << endl;
do{state = (Movement)(rand()%4);}
while(state==WALK);
break;
default:
//cout << "You can stand" << endl;
do{state = (Movement)(rand()%4);}
while(state==STAND);
}
}
}
それは今でも同じです。今、私はさまざまな答えを得ましたが、正しいものではありません!!