Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Где ошибка в программе? Выводит какие то 49

ахахахах ахахахах Мастер (2164), закрыт 2 недели назад
 #include <iostream> 
#include <string>
#include <algorithm>

using namespace std;

int main() {
int N;
cin >> N;
cin.ignore();
int* arr = new int[N];
string x;
getline(cin, x);
for (int i = 0, j = 0; i < 2 * N && j < N; i+2, j++) {
arr[j] = (int)x[i];
}
int k, m;
cin >> k >> m;

for (int i = 0; i < ((m-k+1)/2); i++) {
swap(arr[k-1+i], arr[m - 1 - i]);
}

for (int i = 0; i < N; i++) {
cout << arr[i] << " ";
}

return 0;
}
Дополнен 1 месяц назад
P. S. разобрался где ошибка, пошел исправлять
Лучший ответ
Николай Веселуха Высший разум (374407) 1 месяц назад
 #include <algorithm> 
#include <iostream>
#include <memory>

using namespace std;

int main() {
size_t n;
cin >> n;
auto nums = make_shared<int[]>(n);
for (size_t i = 0; i < n; ++i) cin >> nums[i];
size_t k;
size_t m;
cin >> k >> m;
reverse(nums.get() + k - 1, nums.get() + m);
for (size_t i = 0; i < n; ++i) cout << nums[i] << ' ';
cout.put('\n');
system("pause > nul");
}
ахахахах ахахахахМастер (2164) 1 месяц назад
Спасибо, я конечно хотел без реверса, но ладно. А что делает строчка auto nums = make_shared<int[]>(n);
Николай Веселуха Высший разум (374407) ахахахах ахахахах, создаёт умный указатель на массив типа int, размером n элементов
Остальные ответы
美丽的太阳 美丽的太阳 Профи (560) 1 месяц назад
ПАААААААААААЙТОН БАЛЯТЬ
Oleg LobinПрофи (521) 1 месяц назад
АААААААААААААААА
Jurijus Zaksas Искусственный Интеллект (456568) 1 месяц назад
>arr[j] = (int)x[i];
Думаеццо мне, что тайкпкастить 4 байта на 1 или 2 (я ХЗ, в каком там формате этот стринг хранит свои стринги) - не самая хорошая идея.
ахахахах ахахахахМастер (2164) 1 месяц назад
не понял, что вы имеете ввиду, я новичок
Jurijus Zaksas Искусственный Интеллект (456568) ахахахах ахахахах, (int) - это тайпкастинг. Интерпретация одного типа как другого. Допустим, у тебя есть 4 байта символов 1234. Ты же интерпретируешь их как целое число. То есть лезешь в память по этому адресу и читаешь коды символов как число. В результате получается 875770417. Когда ты проделываешь то же самое с концом своей строки, последний байт (или два), представляющие последний символ, интерпретируются как 4, и ты лезешь в чужую память. И получаешь по рукам.
Krab Bark Искусственный Интеллект (297814) 1 месяц назад
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n,k,m; cin>>n; int* a=new int[n]; for(int i=0;i<n;i++)cin>>a[i]; cin>>k>>m;
reverse(a+k-1,a+m); for(int i=0;i<n;i++)cout<<a[i]<<' '; cout<<endl;}
ахахахах ахахахахМастер (2164) 1 месяц назад
ээ, с помощью реверса нельзя, это слишком легко
Krab Bark Искусственный Интеллект (297814) ахахахах ахахахах, значит, напишем собственную реализацию функции reverse, например, упростив ее код из справочника по C++ :) #include <iostream> #include <algorithm> using namespace std; void reverse(int* f, int* l){for(--l;f<l;++f,--l)swap(*f,*l);} int main() { int n,k,m; cin>>n; int* a=new int[n]; for(int i=0;i<n;i++)cin>>a[i]; cin>>k>>m; reverse(a+k-1,a+m); for(int i=0;i<n;i++)cout<<a[i]<<' '; cout<<endl;}
Похожие вопросы