gpt4 book ai didi

c - 欧拉项目 - 问题 22 : Answer off by 3. 35%

转载 作者:行者123 更新时间:2023-11-30 20:17:35 25 4
gpt4 key购买 nike

我试图解决Problem 22 Project Euler 的方法是,首先使用冒泡排序实现对名称进行排序,然后使用 FOR 循环将名称分数加在一起。 “COLIN”示例运行良好,其他一些随机分数也运行良好。但是,总和是错误的。

我在 StackOverFlow 和类似的编码 Q/A 网站上搜索了类似的问题 22 个问题,但是,似乎大多数人都在使用 python、R 或 C#。我可以通过使用库在 python 中解决这个问题,但我想学习,所以我尝试用 C 来解决这个问题,但失败了。附:我对编程相对较新,但我怀疑我实现不当的冒泡排序导致了这个问题。问题是:我已经尝试在很多地方放置“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。

最佳答案

循环for(int i = 0; i < 20; i++)当条目结束时无法停止。就在这个循环之前,token[z]被复制到 str 。此副本停在终止 token[z] 的空字节处。除此之外,它留在 str无论以前有什么。

然后循环for(int i = 0; i < 20; i++)添加 str所有字母非引号和非空字符的值,包括以前的长名称留下的字母。

应修改此循环以在当前名称结束的位置停止。

关于c - 欧拉项目 - 问题 22 : Answer off by 3. 35%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56998522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com