Я попытался решить Задачу 22 * 1002 * Project Euler, сначала отсортировав имена с помощью реализации пузырьковой сортировки, а затем добавив оценки всех вместе, используя циклы FOR.Пример «COLIN» работает нормально, а также работают и другие случайные оценки.Но общая сумма неверна.
Я искал похожие вопросы 22 на StackOverFlow и похожих сайтах кодирования вопросов и ответов, однако, похоже, что большинство людей используют python, R или C #.Я могу решить эту проблему в Python с помощью библиотек, но я хотел учиться, поэтому я попытался сделать это в C, но это не удается.PS Я относительно новичок в программировании, но я сомневаюсь, что моя плохо реализованная пузырьковая сортировка вызывает проблему.Проблема в том, что я пытался разместить операторы printf во многих местах, но все еще не могу понять, где я ошибаюсь.
FILE *file;
char list[46448];
file = fopen("/home/USER_NAME/Downloads/p022_names.txt", "r");
fscanf(file, "%s", list);
char *tok = strtok(list, ",");
char *token[5163];
token[0] = tok;
int i = 1;
char *temp;
while (tok != NULL){
tok = strtok(NULL, ",");
token[i] = tok;
i++;
}
for(int j = 5162; j >= 0; j--){
for(int i = 0; i < j; i++){
if(strcmp(token[i], token[i + 1]) > 0){
temp = token[i];
token[i] = token[i + 1];
token[i + 1] = temp;
}
}
}
char str[20];
int sum;
int score = 0;
for(int z = 0; z < 5163; z++){
sum = 0;
strcpy(str, token[z]);
for(int i = 0; i < 20; i++){
if((str[i] != '\"') & (str[i] != 0)){
sum += str[i] - 64;
}
}
score += (sum * (z + 1));
}
printf("Names Score: %d\n", score);
}
Тем не менее, я постоянно получаю неправильный ответ 900429178.Правильный ответ 871198282.