当前位置: 首页 > 知识库问答 >
问题:

leetcode 数位和相等数对的最大和,为什么我这么写不对呢?

华睿识
2023-11-20

image.png
这个是题目,
这个是我不通过的测试用例:nums =
[368,369,307,304,384,138,90,279,35,396,114,328,251,364,300,191,438,467,183]
下面是我的代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>int sumNumber(int num) {    int digit;//用于保存每个位数的数字    int sum = 0;//用于记录每个位数的和    while (num != 0) {        digit = num % 10;        sum += digit;        num /= 10;    }    return sum;}int maxNum(int* mid) {    int i = 0, h = 0, max;    int length = 0;//记录数组长度    length = sizeof(mid) / sizeof(mid[0]);    printf("\n");    printf("length = %d\n", h);    if (mid[0] == 0)        max = -1;    if (mid[0] !=0 && mid[1] == 0)        max = mid[0];    /*if (mid[0] != 0 && mid[1] != 0) {        max = mid[0];        for (i = 1; i < m; i++) {            if (mid[i] > max)                max = mid[i];        }    }    */    return max;}int maxNumber(int x, int y) {    return x > y ? x : y;}int maximumSum(int* nums, int numsSize) {    int i = 0, j = 0, h = 0, test = 0, max = 0;    int hashTable[100000] = { 0 };    int find = 0;    int* res = (int*)calloc(numsSize, sizeof(int));    for (i = 0; i < numsSize; i++) {        res[i] = sumNumber(nums[i]);    }    for (i = 0; i < numsSize; i++) {        printf("res[i] = %d  ",res[i]);    }    printf("\n");    /*for (i = 0; i < numsSize; i++) {        for (j = i + 1; j < numsSize; j++) {            if (res[i] == res[j]) {                test = nums[i] + nums[j];                if (test > max)                    max = test;            }        }    }*/    for (i = 0; i < numsSize; i++) {        if (hashTable[res[i]] == 0)            hashTable[res[i]] = nums[i];        else {            hashTable[res[i]] += nums[i];            max = maxNumber(max, hashTable[res[i]]);        }    }    printf("hast18 = %d", hashTable[18]);    //maxNum(hashTable);    if (max == 0)        return -1;    return max;}int main() {    int find = 0;    int nums[19] = { 368,369,307,304,384,138,90,279,35,396,114,328,251,364,300,191,438,467,183 };    find = maximumSum(nums, 19);    printf("  find = %d ", find);}

我运行上面的测试用例后,得到的结果是1044,我感觉没错啊,上面数组中的369,279,396的数位和是18,他们相加的结果是1044,而正确答案是835,即368,438的加和为835。

但是我这样写代码就行,最后运行的结果就是835,求大佬解答。

int sumNumber(int num) {    int digit;//用于保存每个位数的数字    int sum = 0;//用于记录每个位数的和    while (num != 0) {        digit = num % 10;        sum += digit;        num /= 10;    }    return sum;}int maximumSum(int* nums, int numsSize) {    int i = 0, j = 0, h = 0, test = 0, max = 0;    int* res = (int*)calloc(numsSize, sizeof(int));    for (i = 0; i < numsSize; i++) {        res[i] = sumNumber(nums[i]);    }    for (i = 0; i < numsSize; i++) {        printf("res[i] = %d  ", res[i]);    }    printf("\n");    for (i = 0; i < numsSize; i++) {        for (j = i + 1; j < numsSize; j++) {            if (res[i] == res[j]) {                test = nums[i] + nums[j];                printf("test : %d,res[i] = %d\n",test,res[i]);                if (test > max)                    max = test;            }        }    }    if (max == 0)        return -1;    return max;}

image.png

共有1个答案

阳文轩
2023-11-20

题目要求选出两个下标求和,问和的最大值。你那个是三个,不是两个。

 类似资料:
  • 问题内容: 我所有的React项目的文件大小通常都非常大(bundle.js为4.87 mb,vendor.bundle.js为2.87 mb)。我不知道为什么这么大。我已经启用了uglifyJS,但这似乎并没有太大帮助(5.09> 4.87mb和2.9> 2.87mb) 我的package.json 有谁知道如何解决这个问题? 问题答案: 编辑 我不确定您是在Mac / IO还是Windows上

  • 给你一个整数列表,长度为偶数。考虑这样一个操作,您在nums中选择任意数字,并用[1,max(nums)]之间的值更新它。返回所需的操作数,使得对于每个i,nums[i]+nums[n-1-i]等于相同的数。问题可以贪婪地解决。 注意:n是数组的大小,max(nums)是nums中的最大元素。 null 设i=0,nums[0]+nums[6-1-0]=4。 i=1,nums[1]+nums[6-

  • 问题内容: SSCCE: 以上输出: 问题答案: 异常类继承自其方法,并且不会覆盖它。每次都创建新的Exception实例,它们是内存中的不同对象。即使它们的堆栈跟踪相同,但它们在内存中的对象分配仍然不同,并且使用默认的equals()方法,它们并不相同。 但是,您可以定义自定义异常类并重写。

  • 问题内容: 似乎以下代码应返回true,但返回false。 这有什么意义? 问题答案: 常规()和严格()相等之间的唯一区别是,严格相等运算符禁用类型转换。由于已经在比较两个相同类型的变量,因此使用的相等运算符的类型无关紧要。 不管您使用常规相等还是严格相等,对象比较仅 在您比较相同的精确对象时得出 。 也就是说,给定,,,但。 两个不同的对象(即使它们都具有零或相同的精确属性)也永远不会相等地进

  • 问题内容: 您可能知道,这两种类型都是32位。只能容纳整数,而还支持浮点数(如类型名称所示)。 那么怎么可能最大的值为2 31,最大的值为 3.4 * 10 38,而它们都是32位? 我认为的最大容量应大于浮点数,因为它不会为浮点数节省内存,并且仅接受整数。在这种情况下,我很高兴为您提供解释。 问题答案: 您的直觉很正确地告诉您,一个 信息内容 中的 信息内容 不能超过另一个,因为它们都有32位。

  • 我在一次采访中被问到这个问题。给定一个整数数组(具有正值和负值),我们需要找到具有相等总和的不相交子数组的最大数量。 例子: 输入:[1,2,3]输出:2{因为我们最多有2个子数组,总和=3,即[1,2],[3]} 输入: [2 2 2 -2] 输出 : 2 {两个子数组,每个子数组的总和 = 2,即 [2],[2, 2, -2]} 我的方法 我想到的第一种方法是找到前缀和数组,然后以每个元素(前