Loading...
LoshaPanda avatar LoshaPanda 10 Точки

C++ Fundamentals Roxettes - solution ( проблем )

Извинете, имам проблем с решението на тази задача : https://imagebin.ca/v/5JAoGDPIzYUJ.Това е кода за решението :

#include<iostream>
#include<iomanip>

using namespace std;

int hexSymbolToDecimal(char hex) {
    if (hex >= 'a') {
        return 10 + (hex - 'a');
    }
    else {
        return hex - '0';
    }
}

int main() {
    cin.sync_with_stdio(false);
    cout.sync_with_stdio(false);

    const unsigned int NumHexDigitsPerNumber = 5;

    char input[NumHexDigitsPerNumber] = {};

    size_t xorred = 0;

    while (cin >> input[0]) {
        if (input[0] == '.') {
            break;
        }

        cin >> input[1] >> input[2] >> input[3] >> input[4];

        int value = 0;
        for (int i = 0; i < NumHexDigitsPerNumber; i++) {
            value = value << 4; // this is equivalent to value *= 16;, but works faster than multiplication
            value += hexSymbolToDecimal(input[i]);
        }

        xorred ^= value;
    }

    cout << hex << setfill('0') << setw(5) << xorred << endl;
}

Пробмелът е в " for " цикъла при " value = value << 4 " . Разбрах как работи, но не разбрах защо трябва да го правим ? От това което видях е, че премества 4 бита наляво, като от дясната страна поставя нули. Въпросът ми е защо трябва да го правим и как работи това " hex " накрая с " setfill('0') и setw(5) ? Надявам се, че някой може да ми помогне да го разбера !

 

Тагове:
0
C++ Fundamentals
miroslav_krajcir avatar miroslav_krajcir 1 Точки

Hallo, there is also another way to solve this problem than bit operations... you can store the roxette in unordered_set and when it pairs you erase it, so in the end only the one roxette without pair remains...


#include <iostream>
#include <string>
#include <unordered_set>

int main() {
	std::cin.sync_with_stdio(false);
	std::cout.sync_with_stdio(false);

	std::string			roxette = "00000";
	std::unordered_set<std::string>	roxettes;

	while (true) {
		//	read the first digit
		std::cin >> roxette[0];
		if (roxette[0] == '.')
			break;

		//	read the rest of the digits...
		std::cin >> roxette[1] >> roxette[2] >> roxette[3] >> roxette[4];

		auto it = roxettes.find(roxette);

		//	if roxette is not found in set, include the roxette
		if (it == roxettes.end())
			roxettes.insert(roxette);
		//	if already included, erase the roxette
		else
			roxettes.erase(roxette);
	}

	//	print the result
	for (auto& r : roxettes)
		std::cout << r;
}

Roxettes - Pastebin.com

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.