c++ - 对输入的数字进行排序 - FOR 和 WHILE 之间的区别

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

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

例如:输入:4713239 输出:1233479

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

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;
}

最佳答案

您同时修改了 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]
}

关于c++ - 对输入的数字进行排序 - FOR 和 WHILE 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37919418/

相关文章:

c++ - 删除函数C++中的对象

arrays - 解析 'Swift'中的多维数组

c - 循环携带的依赖性(如果存在的话)在哪里?

c# - 如何按 2 级对象属性对 GridView 进行排序

Python,当键是科学格式的 float 时,如何按键对字典进行排序?

c++ - 读取 .part 文件并将它们全部连接起来

c++ - std::unordered_set::equal_range 迭代器问题

PHP - 如何判断多维数组中的所有相邻元素是否存在?

php - 解析 css 文件并以类为键构建背景图像数组

c++ - 如何访问另一个源文件中 'struct' 的静态成员