JA1 - Задача 4 Roxettes
Разбирам решението , знам как трябва да стане , но не мога да го направя . Разбирам , че трябва да XOR-ваме пъврите 5 символа с вторите 5 и получения резултат XOR-ваме със следващите 5 и така докато не получим резултата . Ето и най-сполучливия код , който успях да сътворя ( ситемата отчита само 3 отговора за верни и то от втората половина опити , от първата нито едно не минава ) . Знам , че този код не е това , което се иска , но е най доброто, което упях да направя до момента :
#include<iostream>
#include<vector>
#include<string>
#include<sstream>
using namespace std;
unsigned int findSingle(vector<unsigned int> inV){
unsigned int res = inV[0];
for (unsigned int i=1; i < inV.size(); i++)
res = res ^ inV[i];
return res;
}
int main(){
string Input;
getline(cin, Input);
vector<unsigned int> dna;
for (unsigned int i = 0; i < Input.length(); i += 5) {
stringstream stream(Input.substr(i, 5));
unsigned int num;
while ( stream >> hex >> num ){
dna.push_back(num);
}
}
cout << hex << findSingle(dna);
return 0;
}
А ето и въпросите ми :
1. Как от string инпут да XOR-вам char by char . В лекцията ( частта с обяснението на задачата гледах поне 5 пъти ) стана въпрос , че може да сравняваме char по char , опитах , но така и не успях да получа резултата накрая .
2. Как да четем char без да го записваме ( или поне да ползваме temp array за 5те символа )? Трябва ли да ползваме 2 char array-а за да запазим в тях от 0-5 и от 5-10 и да ги сравним ? Получения отговор трябва да XOR-нем с 10-15 и така докато не достигнем "."
3. Как да направя така , че достигайки '.' да спре ?
Въобще нещо нищо не се получава ...
Благодаря !
Получи се , XOR резултата , даже не се обраъща обратно в hexadecimal ми направо си излиза . Char-овете обаче трябва да ги обърнем в бинарно число преди да ги XOR-нем .