对输入的数字进行排序 - FOR和WHILE之间的差异

时间:2016-06-20 09:52:40

标签: c++ arrays sorting for-loop while-loop

我必须编写一个代码,在一个输入的数字中对数字进行排序。

例如:输入:4713239              输出:1233479

当我输入重复数字(如33)时,当我将最后一个循环设置为FOR时,它无法正常工作:

for(int j = 0; j < arr[i]; j++) // in this loop my output is: 123479.

当我将此循环从FOR更改为WHILE时,它可以正常工作。 这意味着:

while(arr[i]) // and the number is sorted correctly (1233479)

真的告诉我,我不知道这段代码中这些操作之间的区别。

为什么FOR循环不能正常工作?有人能解释一下吗?

我写了一段代码:

int sort(int arg)
{
  int var, score = 0;
  int arr[10] = {0};


  for(int i = 0; i < 10; i++)
    {
      var = arg % 10;
      arr[var]++;
      arg = arg / 10;
    }


  for(int i = 0; i < 10; i++)
    {
      for(int j = 0; j < arr[i]; j++) //while(arr[i]) --> works correctly
    {
      score = score * 10 + i;
      arr[i]--;
    }
    }
  return score;
}

1 个答案:

答案 0 :(得分:1)

你修改了arr [i]和j,因此当两者都是比较的一部分时,循环结束得太快。

for(int j = 0; j < arr[i]; j++) // increase j, compare with arr[i]
{
  score = score * 10 + i;
  arr[i]--; // decrease arr[i]
}