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 パス! sum13({13, 1, 13}) → 0 PASSES! ただし、 sum13({13, 1, 2, 13, 2, 1, 13}) → 3 RETURNS 0 は、13 の最初のインスタンスで停止するためです。

4

9 に答える 9

6

なぜ 2 つのループを使用しているのですか? 数値が の場合は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 の次の要素がある場合、これは自然に 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 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 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 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 に答える