一个简单的算法(急急急)
各位大虾,在下一个基础的问题请教各位:
题目:设计一个程序,实现判别一个0,1构成的字串,被3整除后的余数。
算法:设:s0为所有余0的字串的集合,s1为所有余1的字串的集合,s2为所有余2的字串的集合。起始设置x=0 ,当x后再输入0时,该数仍属于s0;当x后再输入1时,该数属于s1。当x属于s1时,x后再输入0时,该数属于s2;x后再输入1时,该数属于s0。当x属于s2时,x后再输入0时,该数属于s1;x后再输入1时,该数属于s2。
将算法化为表格(2×3的矩阵):行表示s0,s1,s2 列表示输入的数0,1 行列的交叉为该数属于的集合s0,s1,s2,表示余0,1,2
0 1
s0 s0 s1
s1 s2 s0
s2 s1 s2
推荐阅读
哈哈 :)
有空写一个看看:
#include <iostream>
#include <string>
using namespace std;
/////////////////////////////
// class decaration
/////////////////////////////
class statemachine
{
public:
virtual statemachine* change(char ch) = 0;
virtual int result() = 0;
static int parse(string bin);
};
class machines0 : public statemachine
{
public:
statemachine* change(char ch);
int result() { return 0; }
};
class machines1 : public statemachine
{
public:
statemachine* change(char ch);
int result() { return 1; }
};
class machines2 : public statemachine
{
public:
statemachine* change(char ch);
int result() { return 2; }
};
class machineerror : public statemachine
{
public:
statemachine* change(char ch);
int result() { return -1; }
};
/////////////////////////////
// class definition
/////////////////////////////
int
statemachine::parse(string bin)
{
statemachine *sm = new machines0();
for (int i = 0; i < bin.length(); ++i) {
statemachine *tmp = sm->change(bin[i]);
delete sm;
sm = tmp;
if ( -1 == sm->result())
return -1;
}
int result = sm-> result();
delete sm;
return result;
}
statemachine*
machines0::change(char ch)
{
switch (ch) {
case 0: return new machines0();
case 1: return new machines1();
default : return new machineerror();
}
}
statemachine*
machines1::change(char ch)
{
switch (ch) {
case 0: return new machines2();
case 1: return new machines0();
default : return new machineerror();
}
}
statemachine*
machines2::change(char ch)
{
switch (ch) {
case 0: return new machines1();
case 1: return new machines2();
default : return new machineerror();
}
}
statemachine*
machineerror::change(char ch)
{
return new machineerror();
}
/////////////////////////////
// test
/////////////////////////////
int main(int argc, char** argv)
{
cout << statemachine::parse("0") << endl;
cout << statemachine::parse("1") << endl;
cout << statemachine::parse("10") << endl;
cout << statemachine::parse("01") << endl;
cout << statemachine::parse("110") << endl;
cout << statemachine::parse("101") << endl;
cout << statemachine::parse("111") << endl;
cout << statemachine::parse("1011010010100101") << endl;
cout << statemachine::parse("2110") << endl;
cout << statemachine::parse("a110") << endl;
system("pause");
return 0;
}


讨论区