?>
программа на c# для класса searchtree из примера добавьте следующие поля, свойства и методы: закрытое поле count, подсчитывающее количество вершин дерева; свойство count, возвращающее количество вершин дерева; метод isempty, возвращающий true, если дерево пусто, или false в противном случае; метод clear, удаляющий дерево. using system; using system.collections.generic; using system.text; namespace binarytrees { // двоичное дерево поиска public class searchtree { // узел дерева class node { public double value { get; set; } // хранимое в узле значение public node left { get; set; } // ссылка на левое поддерево public node right { get; set; } // ссылка на правое поддерево // конструктор (создает узел дерева) public node(double val) { value = val; left = right = null; } } node root = null; // ссылка на корень дерева // добавление элемента в дерево public void add(double val) { if (root == null) { root = new node(val); return; } node current = root; // ссылка на текущий узел while (true) { if (val < current.value) { if (current.left == null) { current.left = new node(val); return; } else current = current.left; } else { if (current.right == null) { current.right = new node(val); return; } else current = current.right; } } } // поиск элемента public bool search(double val) { if (root == null) return false; node current = root; // ссылка на текущий узел while (true) { if (val < current.value) { if (current.left == null) return false; else current = current.left; } else if (val > current.value) { if (current.right == null) return false; else current = current.right; } else return true; } } // симметричный обход всего дерева public void inorderwalk() { inorderwalk(root); console.writeline(); } // симметричный обход поддерева t void inorderwalk(node t) { if (t ! = null) { inorderwalk(t.left); console.write(t.value + " "); inorderwalk(t.right); } } } class program { static void main(string[] args) { searchtree tree = new searchtree(); tree.add(4); tree.add(2); tree.add(0); tree.add(3); tree.add(6); tree.add(5); tree.add(9); console.writeline("симметричный обход дерева: "); tree.inorderwalk(); for (double x= 0; x < 10; x++) { if (tree.search(x)) console.writeline("элемент {0} содержится в дереве", x); else console.writeline("элемент {0} отсутствует в дереве", x); } console.readline(); } } }
Ответы
я просто ищу все простые числа в диапазоне от 1 до n с решето эратосфена, а далее просто сравниваю вектор с простыми числами.
мой пример решения:#include
#include
using namespace std;
int main()
{
int n;
cin > > n;
vector prime (n+1, true);
prime[0] = prime[1] = false;
for (int i=2; i*i< =n; ++i)
if (prime[i])
for (int j=2; j< =n/i; j++)
if (prime[i*j]) prime[i*j] = false;
for(int i = 0; i < prime.size(); ++i)
{
for(int j = i; j < prime.size(); ++j)
{
if(prime[i]& & prime[j])
if(i+j==n)
cout < < i < < " " < < j < < endl;
}
}
cin.get();
cin.get();
}