Блог пользователя ogrin_knyaz

Автор ogrin_knyaz, история, 6 лет назад, По-русски

include

include

using namespace std;

class NoMoreSpace: public exception { char *msg; public: NoMoreSpace(): msg("No More Space"){} const char *what() const throw() { return msg; } };

template class Heap { int count; T *items; int size; public: Heap(int size) { count=0; items=new T[Heap::size=size]; } void insert (const T &element); T &operator[](int i) { return items[i]; } const T &operator[](int i) const { return items[i]; } void print(); };

template void Heap::insert(const T & elem) { if (count>=size) throw NoMoreSpace(); int curIndex=count++; int parentIndex; while(curIndex > 0 && elem < items[parentIndex=(curIndex-1)/2]) { items[curIndex]=items[parentIndex]; curIndex=parentIndex; } items[curIndex]=elem; }

template void Heap::print() { for (int i=0; i<count; i++) cout << items[i] << ' ' << endl; }

int main() { Heap hp(1000); try { hp.insert(3); hp.insert(7); hp.insert(1); hp.insert(4); hp.insert(2); hp.insert(0); } catch (NoMoreSpace &ex) { cout << "Got an exception: " << ex.what() << endl; } hp.print(); }

Полный текст и комментарии »

  • Проголосовать: нравится
  • -33
  • Проголосовать: не нравится

Автор ogrin_knyaz, история, 6 лет назад, По-русски

include

include

include

include

using namespace std; const char X = 'X'; const char O = '0'; const char EMPTY = ' '; const char TIE = 'T'; const char NO_ONE = 'N'; void instructions(); char askYesNo(string question); int askNumber(string question, int high, int low = 0); char humanPiece(); char opponent(char piece); void displayBoard(const vector& board); char winner(const vector& board); bool isLegal(const vector& board, int move); int humanMove(const vector& board, char human); int computerMove(vector board, char computer); void announceWinner(char winner, char computer, char human); void instructions() { cout << "Добро пожаловать в игру: Tic-Tac-Toe.\n"; cout << "--где человеческий мозг ничто против кремниевого процессора\n\n"; cout << "Делайте ход с помощью номеров. От 0 до 8. Номер\n"; cout << "соответствует указанному положению в таблице. Как показано:\n\n"; cout << " О | 1 | 2 "<< endl; cout << " --------- "<< endl; cout << " 3 | 4 | 5 "<< endl; cout <<" --------- " << endl; cout << " 6 | 7 | 8" << endl; cout << endl; cout << "приготовься человек, игра начинается...\n\n"; } char askYesNo(string question) { char response; do { cout << question << "(y/n): "; cin >> response; } while(response!='y' && response!='n'); return response; } int askNumber(string question, int high, int low) { int num; do { cout << question << "(" << low << "-" << high << "):"; cin >> num; } while(num>high || num < low); return num; } char humanPiece() { char go_first=askYesNo("Вы будете ходить первым?"); if (go_first=='y') { cout << "Тогда ходи, человек." << endl; return X; } else { cout << "Ваша храбрость будет вашим поражением. Что ж, я хожу первый" << endl; return O; } } char opponent(char piece) { if (piece == X) { return O; } else { return X; } } void displayBoard(const vector& board) { cout << "\n\t" << board[0] << "|" << board[1] << "|" << board[2]; cout << "\n\t" << "-----"; cout << "\n\t" << board[3] << "|" << board[4] << "|" << board[5]; cout << "\n\t" << "-----"; cout << "\n\t" << board[6] << "|" << board[7] << "|" << board[8]; cout << "\n\n"; } char winner(const vector& board) { const int WINNING_ROWS[8][3]={{0,1,2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6} }; const int TOTAL_ROWS=8; for (int row=0; row<TOTAL_ROWS; row++) { if ((board[WINNING_ROWS[row][0]] != EMPTY) && (board[WINNING_ROWS[row][0]] == board[WINNING_ROWS[row][1]]) && (board[WINNING_ROWS[row][1]] == board[WINNING_ROWS[row][2]])) { return board[WINNING_ROWS[row][0]]; } } if (count(board.begin(), board.end(), EMPTY) == 0) return TIE; return NO_ONE; } inline bool isLegal(int move, const vector& board) { return (board[move] == EMPTY); } int humanMove(const vector& board, char human) { int move = askNumber("Ваш следующий ход?", (board.size() -1)); while (!isLegal(move, board)) { cout << "\nЭто поле уже занято, глупый человек.\n"; move = askNumber("Ваш следующий ход?", (board.size() -1)); } cout << "Допустим...\n"; return move; } int computerMove(vector board, char computer) { unsigned int move = 0; bool found = false; while (!found && move < board.size()) { if (isLegal(move, board)) { board[move] = computer; found = winner(board) == computer; board[move] = EMPTY; } if (!found) { ++move; } } if (!found) { move = 0; char human = opponent(computer); while (!found && move < board.size()) { if (isLegal(move, board)) { board[move] = human; found = winner(board) == human; board[move] = EMPTY; } if(!found) { ++move; } } } if ( ! found) { move = 0; unsigned int i = 0; const int BEST_MOVES[] = {4, 0, 2, 6, 8, 1, 3, 5, 7}; while (!found && i < board.size()) { move = BEST_MOVES[i]; if (isLegal(move, board)) { found = true; } ++i; } } cout << "Тогда я схожу так " << move << endl; return move; } void announceWinner(char winner, char computer, char human) { if (winner == computer) { cout << winner << " выйграл!\n"; cout << "Как я и предсказывал, человек,\n"; cout << " компьютеры во всех отношениях превосходят вас!\n"; }

else if (winner == human)
{
    cout << winner << " выйграл!\n";
    cout << "Нет, нет, нет. Ты меня обманул где-то!\n";
    cout << "Этого больше не повторится, клянусь свои процессором!\n";
}
else
{
    cout << "Это ничья.\n";
    cout << "Тебе повезло, человек, пусть будет так...\n";
    cout << "Отпразднуйте ... это лучшее, чего вы когда-либо достигнете.\n";
}

} int main() { int move; const int NUM_SQUARES = 9; vector board(NUM_SQUARES, EMPTY); instructions(); char human = humanPiece(); char computer = opponent(human); char turn = X; displayBoard(board); while (winner(board) == NO_ONE) { if (turn == human) { move = humanMove(board, human); board[move] = human; } else { move = computerMove(board, computer); board[move] = computer; } displayBoard(board); turn = opponent(turn); } announceWinner(winner(board), computer, human); return 0; }

Полный текст и комментарии »

  • Проголосовать: нравится
  • -26
  • Проголосовать: не нравится

Автор ogrin_knyaz, история, 6 лет назад, По-русски

/*#include <bits/stdc++.h> using namespace std; main() { int n; cin >> n; int *x=new int [n]; int *y=new int [n]; int *x2=new int [n]; int y2=new int [n]; for (int i=0; i<n; i++) { cin >> x[i] >> y[i]; x2[i]=x[i]; y2[i]=y[i]; } sort(x2, x2+n); sort(y2, y2+n); int xc, yc, xp, yp; xc=x2[(n+1)/2]; yc=y2[(n+1)/2]; bool flag=true; for (int i=0; i<n; i++) { if (x[i]==xc && y[i]==yc) { flag=false; } } int dx[4]{1,0,-1,0}; int dy[4]{0,-1,0,1}; if (!flag) { int best=99999999; for (int i=0; i<n; i++) { for (int k=0; k<n; k++) { xp=x[i]+dx[k]; yp=y[i]+dy[k]; flag=true; for (int j=0; j<n; j++) { if (x[j]==xp && y[j]==yp) { flag=false; } } if (!flag) { continue; } int d=0; for (int j=0; j<n; j++) { d+=abs(xp-x[j])+abs(yp-y[j]); } if (d<best) { best=d; xc=xp; yc=yp; } } } } cout << xc << ' ' << yc; }/

Полный текст и комментарии »

  • Проголосовать: нравится
  • -35
  • Проголосовать: не нравится