0

所以,基本上,这些问题要求我找到数组中数字的总和。除了数字“13”很不吉利,所以它不计算“13”和紧跟在“13”之后的数字。

这就是我所做的:

public int sum13(int[] nums) {
  int d = 0;
  int sum = 0;

  for (int i=0;i<nums.length;i++){
    if(nums[i] == 13){
    d = i;
    break;
    }
    else{
    d = nums.length;
    }
  }
  for(int i=0;i<d;i++){
   sum = sum + nums[i];
  }
  return sum;
}

即使我通过了大部分测试,我仍然无法理解如何从总和中排除 13 旁边的数字。

例如 sum13({1, 2, 2, 1, 13}) → 6 PASSES!sum13({13, 1, 13}) → 0 次通过!但是, sum13({13, 1, 2, 13, 2, 1, 13}) → 3 返回 0,因为它在 13 的第一个实例处停止。

4

9 回答 9

6

为什么要使用两个循环?如果数字是13,请不要将其或下一个数字添加到总和中,如下所示:

public int sum13(int[] nums) {
    int sum = 0;
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] == 13) {
            i++;
        } else {
            sum = sum + nums[i];
        }
    }
    return sum;
}
于 2013-04-03T13:13:37.860 回答
4

根据您的问题,如果数字是 13 及其直接后继,您将排除在外。因此,当您发现 13 再次增加循环计数器时:

 for(int i=0;i<nums.length;i++){
   if(nums[i] == 13) {
     i++;
    }
   else {
     sum = sum + nums[i];
   }
  }

如果数组中有一个,这自然会跳过 13 的下一个元素。

于 2013-04-03T13:14:03.053 回答
2

在第一个for循环中直接求和怎么样?更短、更简单、更快捷的方式:)

public int sum13(int[] nums) {
  int sum = 0;

  for (int i=0;i<nums.length;i++){
    if (nums[i] != 13) {
      sum += nums[i];
    } else {
      i++;
    }
  }
  return sum;
}
于 2013-04-03T13:13:53.633 回答
1

你听到什么了continue吗?

if(nums[i] == 13){
     d = i;
     continue;
}
于 2013-04-03T13:10:38.997 回答
0
public int sum13(int[] nums) {
      boolean skip = false;
      int sum = 0;

      for (int i=0;i<nums.length;i++){
        if(nums[i] == 13){
            skip=true;
            continue;
        }
        else{
        if(skip) {
            skip=false;
            continue;
        }
        sum+=nums[i];
        }
      }

      return sum;
    }
于 2013-04-03T13:15:31.890 回答
0

您实际上正在做的是在第一次出现 13 时停止。

试试这个:

public int sum13(int[] nums) {
    int sum = 0;

    for (int i = 0; i < nums.length; i++) {
        if (nums[i] == 13) {
            i++;
        } else {
            sum += nums[i];
        }
    }

    return sum;
}

我没有测试它,但它应该工作......

干杯!

于 2013-04-03T13:20:29.227 回答
0

试试这个

   public int mySum(int[] nums, int except) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
             sum += (nums[i] == except) ? 0: nums[i];
        }
        return sum;
    }

然后

mySum(nums, 13)
于 2013-04-03T13:21:17.653 回答
0

使用继续;值等于 13 时的语句。

public int sum13(int[] nums) {
  int sum = 0;
  for (int i=0;i<nums.length;i++){
    if(nums[i] == 13){
       continue;
    }
    else{
       sum = sum + nums[i];
    }
  }
  return sum;
}
于 2013-04-03T13:21:29.077 回答
0

试试这个。

public int sum(int[] nums) {
    int sum = 0;
    for (int i = 0; i < nums.length;) {
        if (nums[i] == 13)
            i = i + 2;
        else {
            sum = sum + nums[i];
            i++;
        }
    }
    return sum;
}
于 2013-04-03T13:33:20.363 回答