Я пытался решить следующую проблему на интернет-судье Uva Газета 11340
Короче говоря, проблема состоит в том, чтобы найти значение статьи в соответствии с таблицей цен, в которой цены отдельных символов приведены. Все символы, которые появляются в статье, а не в таблице цен, имеют цену 0. Я пытался ответить на этот вопрос несколько раз, что казалось бы легким, но в итоге получился неправильный ответ, пока я не нашел решение на github Solution .
В разделе отладки задачи есть примечания к вопросу, которые я забыл просмотреть.
В UVa Online есть несколько двоичных (не ASCII) символов Вклад судьи по этой проблеме. Они встречаются только в статье, а не в таблице.
Я принял свое собственное решение, когда использовал преобразование типов в (int) c
, как в следующем фрагменте кода из решения github выше * 1016. *
for (int i = 0; i < m; i++) { // reads m lines of the article
unsigned char c; // character by character and compute the total
while ((c = cin.get()) != '\n') {
total += paychit[(int) c];
}
}
Я не совсем понимаю, что делает приведение типов здесь (unsigned char to int). Я попытался прочитать с этого сайта несколько вопросов о не-ascii символах в c ++, но это не помогло. Простой запрос Google для диапазона не-ascii символов указывает мне на статью о том, что это 0-255, это правда? и что означает бинарный префикс для не-ascii символов. Пожалуйста, помогите мне понять, что здесь происходит.
Мое собственное решение проблемы:
#include<string>
#include<array>
#include<iomanip>
using namespace std;
int main(){
int N,K,M,p;
double x;
unsigned char c;
cin >> N;
getchar();
array<int,256> price;
array<int,256> count;
cout << fixed << setprecision(2);
while(N--){
cin >> K;
getchar();
price.fill(0);
count.fill(0);
while(K--){
cin >> c >> p;
getchar();
price[(int) c] = p;
}
cin >> M;
getchar();
while(M--) while((c = getchar()) != '\n') count[(int) c]++;
x = 0.00;
for(int i=0; i < 128; i++) x+=(count[i] * price[i]);
cout << x / 100 << "$" << endl;
}
return 0;
}