렌덤워크
~cpp
#include <iostream>
#include <vector>
#include <ctime>
#include <stdexcept>
using namespace std;
const int DIRECTION_ROW[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int DIRECTION_COL[8] = {0, 1, 1, 1, 0, -1, -1, -1};
struct sRoach
{
int curRow;
int curCol;
int count;
};
void showBoard(const vector< vector<int> >& board);
bool isAllBoard(const vector< vector<int> >& board);
void moveRoach(vector< vector<int> >& board, sRoach& roach);
void inputRoachPosition(sRoach& roach, const vector< vector<int> >& board);
int main()
{
srand((unsigned)time(NULL));
cout<< "Enter board size(ex: row, col): ";
int rows, cols;
cin >> rows >> cols;
vector< vector<int> > board(rows);
for(int i = 0; i < rows; i++)
board[i].resize(cols);
sRoach roach;
roach.count = 0;
try
{
inputRoachPosition(roach, board);
}
catch(domain_error)
{
cout << "You must correct roach position!" << endl;
return 1;
}
while(!isAllBoard(board))
{
moveRoach(board, roach);
}
showBoard(board);
cout << "count of roach: " << roach.count << endl;
return 0;
}
void showBoard(const vector< vector<int> >& board)
{
for(int i = 0; i < board.size(); i++)
{
for(int j = 0; j < board[i].size() ; j++)
{
cout << board[i][j] << "\t";
}
cout << endl;
}
}
bool isAllBoard(const vector< vector<int> >& board)
{
for(int i = 0; i < board.size(); i++)
{
for(int j = 0; j < board[i].size() ; j++)
{
if(board[i][j] == 0)
return false;
}
}
return true;
}
void moveRoach(vector< vector<int> >& board, sRoach& roach)
{
int dir = rand() % 8;
roach.curRow += DIRECTION_ROW[dir];
roach.curCol += DIRECTION_COL[dir];
if((roach.curRow >= 0 && roach.curRow <= board.size() - 1)
&& (roach.curCol >= 0 && roach.curCol <= board[0].size() - 1))
{
board[roach.curRow][roach.curCol]++;
roach.count++;
}
else
{
roach.curRow -= DIRECTION_ROW[dir];
roach.curCol -= DIRECTION_COL[dir];
}
}
void inputRoachPosition(sRoach& roach, const vector< vector<int> >& board)
{
cout << "Enter roach initil position(ex: row, col): ";
cin >> roach.curRow >> roach.curCol;
if((roach.curRow < 0 || roach.curRow > board.size())
|| (roach.curCol < 0 || roach.curCol > board[0].size()))
throw domain_error("Roach position is worng");
}
단어 빈도수
~cpp
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
struct sWord
{
string name;
int count;
};
bool compare(const sWord& x, const sWord &y);
void showResult(const vector<sWord>& words);
void checkInWords(vector<sWord>& words, const string& x);
void reform(string& x);
void addInWords(vector<sWord>& words, const string& x);
int main()
{
vector<sWord> words;
cout << ">> ";
string x;
while(cin >> x)
{
if(x == ";")
break;
reform(x);
checkInWords(words, x);
}
sort(words.begin(), words.end(), compare);
showResult(words);
return 0;
}
bool compare(const sWord& x, const sWord &y)
{
return x.name < y.name;
}
void showResult(const vector<sWord>& words)
{
for(vector<sWord>::size_type i = 0; i < words.size(); i++)
{
cout << words[i].name << "\t" << words[i].count << endl;
}
cout << "total words: " << words.size() << endl;
}
void checkInWords(vector<sWord>& words, const string& x)
{
for(vector<sWord>::size_type i = 0; i < words.size(); i++)
{
if(words[i].name == x)
{
words[i].count++;
return;
}
}
addInWords(words, x);
}
void reform(string& x)
{
for(string::size_type i = 0; i < x.size(); i++)
strlwr(&x[i]);
char lastChar = x[x.size() - 1];
if(lastChar == '.' || lastChar == ',')
x.resize(x.size() - 1);
}
void addInWords(vector<sWord>& words, const string& x)
{
sWord newWord;
newWord.name = x;
newWord.count = 1;
words.push_back(newWord);
}