init commit
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
#include <iostream>
|
||||
|
||||
class A {
|
||||
std::string s;
|
||||
public:
|
||||
A(const std::string& s) : s(s) {}
|
||||
~A() { std::cout << s << std::endl; }
|
||||
};
|
||||
|
||||
void f() {
|
||||
std::string s;
|
||||
|
||||
if (!(std::cin >> s)) {
|
||||
throw 0;
|
||||
}
|
||||
|
||||
A a(s);
|
||||
f();
|
||||
}
|
||||
|
||||
int main() {
|
||||
try {
|
||||
f();
|
||||
}
|
||||
catch (...) {
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
Некоторая рекурсивная функция func от трех целых аргументов a, b, k (a, b >= 1, k >= 0) определена следующим образом:
|
||||
|
||||
func(a, b, k) == a + b при k == 0
|
||||
func(a, b, k) == a при k > 0, b == 1
|
||||
func(a, b, k) == f(a, f(a, b - 1, k), k - 1) при k > 0, b > 1
|
||||
|
||||
На стандартном потоке ввода подаются тройки чисел: два 64-битных знаковых целых положительных числа a, b и 32-битное целое неотрицательное число k. Для каждой тройки чисел на стандартный поток вывода напечатайте значение описанной выше функции.
|
||||
|
||||
Параметры на входе будут таковы, что вычисление завершится за разумное время. Для вычислений достаточно 64-битного целого знакового типа.
|
||||
|
||||
Для возврата значения из рекурсии используйте исключения. Выход из рекурсивной функции с помощью явного или неявного return запрещен.
|
||||
|
||||
Напишите свой класс (например, Result) для передачи результата вычислений вместе с исключением. Не используйте выбрасывание исключений базовых (например, int) типов.
|
||||
|
||||
В комментарии в начале программы опишите, что из себя представляет эта рекурсивная функция.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
class Result {
|
||||
long long val;
|
||||
public:
|
||||
Result(long long val) : val(val) {}
|
||||
long long value() const { return val; }
|
||||
};
|
||||
|
||||
// Функция определена по условию. Выкидывает результат в виде exception
|
||||
void f(long long a, long long b, int k) {
|
||||
if (k == 0) {
|
||||
throw Result(a + b);
|
||||
}
|
||||
|
||||
if (b == 1) {
|
||||
throw Result(a);
|
||||
}
|
||||
|
||||
try {
|
||||
f(a, b - 1, k);
|
||||
}
|
||||
catch (const Result& result) {
|
||||
f(a, result.value(), k - 1);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
long long a, b;
|
||||
int k;
|
||||
while (std::cin >> a >> b >> k) {
|
||||
try {
|
||||
f(a, b, k);
|
||||
}
|
||||
catch (const Result& result) {
|
||||
std::cout << result.value() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
Реализуйте класс S следующим образом:
|
||||
|
||||
Класс хранит целое число (типа int).
|
||||
Число считывается со стандартного потока ввода в конструкторе.
|
||||
Число выводится на стандартный поток вывода в деструкторе.
|
||||
Следующая программа:
|
||||
|
||||
using namespace std;
|
||||
void func(S v)
|
||||
{
|
||||
if (v) {
|
||||
func(move(v));
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
func(S());
|
||||
}
|
||||
|
||||
считывает последовательность целых чисел и выводит на стандартный поток вывода их сумму.
|
||||
Если входная последовательность пустая, программа не выводит ничего.
|
||||
|
||||
Проверка на переполнение не требуется.
|
||||
|
||||
Глобальные переменные, static, mutable запрещены.
|
||||
|
||||
Сдаваемый на проверку класс должен подключать необходимые заголовочные файлы.
|
||||
Examples
|
||||
Input
|
||||
|
||||
1 2 3
|
||||
|
||||
Output
|
||||
|
||||
6
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
class S {
|
||||
int v;
|
||||
int sum;
|
||||
bool last;
|
||||
bool first;
|
||||
public:
|
||||
S(S&& s) {
|
||||
int val;
|
||||
first = false;
|
||||
|
||||
if (std::cin >> val) {
|
||||
v = val;
|
||||
last = false;
|
||||
sum = s.sum + v;
|
||||
} else {
|
||||
last = true;
|
||||
sum = s.sum;
|
||||
}
|
||||
|
||||
}
|
||||
~S() {
|
||||
if (last && !first) {
|
||||
std::cout << sum << std::endl;
|
||||
}
|
||||
}
|
||||
S() : v(0), sum(0), last(true), first(true) {
|
||||
int val;
|
||||
|
||||
if (std::cin >> val) {
|
||||
v = val;
|
||||
last = false;
|
||||
sum = v;
|
||||
}
|
||||
}
|
||||
|
||||
operator bool() const {
|
||||
return !last;
|
||||
}
|
||||
};
|
||||
|
||||
// using namespace std;
|
||||
// void func(S v) {
|
||||
// if (v) {
|
||||
// func(move(v));
|
||||
// }
|
||||
// }
|
||||
|
||||
// int main() {
|
||||
// func(S());
|
||||
// }
|
||||
Reference in New Issue
Block a user