Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime> //для шариков
- #include <fstream> //для обработки файлов
- using namespace std;
- //Шарики
- /*
- * Сюжет задачи про шарики. Из урны с 10 пронумерованными шариками вынимают по одному шарику.
- * Подсчитать общее количество ситуаций, когда номер хотя бы одного вынутого шарика совпадает
- * с порядковым номером действия "вынимания", например, когда шарик № 3 будет вынут 3-им по порядку.
- */
- /*
- bool Iter() {
- // 0, 1, 2, 3, .. ,9 - 10
- bool used[10] = {false, false, false, false, false, false, false, false, false, false};
- for(int i = 0; i < 10; ++i) {
- int a = rand() % 10;
- while(used[a])
- a = rand() % 10;
- used[a] = true;
- if (i == a)
- return true;
- }
- return false;
- }
- int main() {
- srand(time(nullptr));
- int ans = 0, N = 10000000;
- for (int i = 0; i < N; ++i) {
- ans += Iter();
- }
- cout << ans* 1.0 / N;
- return 0;
- }*/
- //Обработка файлов - 1 вариант
- /*
- int main() {
- // in.txt (in), out.txt(out)
- ifstream in;
- ofstream out;
- in.open("in.txt", ios_base::in); // "c:\folder\file.txt" (проверить полный путь к файлу на windows)
- out.open("out.txt", ios_base::out);
- if (!in.is_open()) { // эквивалентно in.is_open() == false
- cout << "Error: can't open in file!\n";
- return 1;
- }
- char c, c1;
- cout << "Введите на что заменить пробелы: ";
- cin >> c1;
- while(!in.eof()) {
- in.get(c);
- if (c == ' ')
- out.put(c1);
- else
- out.put(c);
- }
- in.close();
- out.close();
- return 0;
- }
- */
- //Римская СС
- /*
- int f(char c) {
- if (c == 'M')
- return 1000;
- else if (c == 'D')
- return 500;
- else if (c == 'C')
- return 100;
- else if (c == 'L')
- return 50;
- else if (c == 'X')
- return 10;
- else if (c == 'V')
- return 5;
- else if (c == 'I')
- return 1;
- else {
- cout << "Error: unknown symbol " << c << "!\n";
- exit(1);
- }
- }
- int main() {
- string str;
- cin >> str;
- int a = f(str[str.size() - 1]);
- int ans = a;
- int b = 0;
- int c = a; //маскимальный разряд, который мы обработали(обработка строки справа налево)
- int j = 0; //сколько раз вподряд мы обработали разряд меньше максимального
- for (int i = str.size() - 2; i >= 0; i--) {
- b = f(str[i]);
- //проверка на то, что мы не написали меньший разряд слева от большего(для случаев DM, LC, VX - так нельзя)
- if ((b == 500 && a == 1000) || (b == 50 && a == 100) || (b == 5 && a == 10)) { // b - левее а
- cout << "Error!\n";
- exit(1);
- }
- //проверка на то, что мы не написали два меньших разряда вподряд слева от большего (IIX - две единицы слева от 10)
- if (b > c) {
- j = 0;
- c = b;
- } else if (b < c) {
- ++j;
- if (j == 2) {
- cout << "Error!\n";
- exit(1);
- }
- } else { // b == c
- j = 0;
- }
- //конец проверки
- if (b >= a)
- ans += b;
- else
- ans -= b;
- a = b;
- }
- cout << ans;
- return 0;
- }/*
Advertisement
Add Comment
Please, Sign In to add comment