А++-++а ≠ 0 однозначно! Выражение содержит два инкремента - сначала постфиксный, затем, после знака минус - префиксный. Постфиксный инкремент выполняется ПОСЛЕ выполнения операции, а префиксный - ДО. Поэтому сначала выполнится префиксный ++, который увеличит операнд "а", затем из прежнего значения a, стоящего слева от знака минус, вычтется "новое" значение "а", и затем уже постфиксный инкремент нарастит полученное значение.
Пусть a = 5 для определённости. В данном выражении у нас есть оператор инкремента(увеличение на 1). Посмотрим, что же получится в результате. В первом случае(a++) оператор инкремента постфиксный. Это значит, что если он входит в состав сложного выражения, то сначала выполняются другая операция, а ++ выполняется в последнюю очередь. Если же оператор инкремента префиксный, то для начала выполнится именно он. То есть, смотрите: 1)Вначале не обращаем внимания на знак ++, в качестве уменьшаемого пойдёт само значение а.(смотрим вышеизложенное). 2)Теперь определим значение вычитаемого. Ну во-первых. Именно сейчас выполняется a++ в его истинном виде, то есть, значение a становится равно 6. Далее, у нас есть оператор ещё ++a. То есть, прежде чем вычитать, значение а текущее увеличивается на 1. То есть, значение а равно 6 + 1 = 7 Ну и теперь выполняем вычитание, 5 - 7 = -2 То есть, нуля тут не получится никак, это ОЧЕНЬ ЧАСТАЯ ОШИБКА. Выходит, что второй операнд на 2 больше первого, поэтому 0 не выйдет.
Исходная цепочка ЛОМ 1-й шаг ЛОМ 2-й шаг ЛОММОЛ 3-й шаг ЛОММОЛН 4-й шаг ЛОММОЛН 5-й шаг ЛОММОЛННЛОММОЛ 6-й шаг ЛОММОЛННЛОММОЛО Результат ЛОММОЛННЛОММОЛО Количество букв «О» 5
4.
Исходная цепочка КОЛ 1-й шаг Л 2-й шаг ЛЛО 3-й шаг ЛЛОК Результат ЛЛОК
5.
Номер строки Строка 1 1 2 21 3 312 4 4213 5 53124 6 642135 .............. 9-я строка будет оканчиваться на четные цифры от 8 вниз 2468
Вот http://pastebin.com/x5kVbW2D Подредактируй ввод вывод.
или вот #include<bits/stdc++.h> using namespace std; const int N = 1024+3; //size of "RAM"vector<pair<bool, int> > ram(N); //ram int get_area(int n){ for (int i = 0; i < N-n-1 ; i ++) { if(ram[i].first == false) { int j; for (j = i; j < i+n ; j ++ ) if(ram[j].first == true) break; if (ram[j].first == true) { i = j; continue; } for(j = i ; j < i+n ; j ++) { ram[j].first = true; ram[j].second = i; } return i; } } return -1; } string del_area(int n){ int j = n; for(int i = n ; ram[j].second == ram[i].second && i < N-1; i ++) { ram[i].first = false; ram[i].second = 0; } return "Success! Area deleted!";} int get_status(){ cout << endl << "Byte using of 1024 RAM:" << endl; for(int i = 0 ; i < N-2 ; i ++) { if(ram[i].first == false) cout << "-" << ' '; else cout << ram[i].second << ' '; }} int main(){ ///code by Dmitry Kulazhenko (DmitryCpp) ///ram index begins at 0 ///give area of RAM, size n get_area enter n ///delete area, with start index n del_area enter n ///give status of using RAM get_status ///to quit exit string s; while( s != "exit" ) { cin >> s; if (s == "get_area") { int n; cin >> n; cout << get_area(n); cout << endl; } if (s == "del_area") { int n; cin >> n; cout << del_area(n); cout << endl; } if (s == "get_status") { cout << get_status(); cout << endl; } } return 0;}
Выражение содержит два инкремента - сначала постфиксный, затем, после знака минус - префиксный. Постфиксный инкремент выполняется ПОСЛЕ выполнения операции, а префиксный - ДО. Поэтому сначала выполнится префиксный ++, который увеличит операнд "а", затем из прежнего значения a, стоящего слева от знака минус, вычтется "новое" значение "а", и затем уже постфиксный инкремент нарастит полученное значение.