【问题标题】:Sort entered number - difference between FOR and WHILE对输入的数字进行排序 - FOR 和 WHILE 之间的区别
【发布时间】:2016-10-21 12:37:20
【问题描述】:

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

例如:输入: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;
}

【问题讨论】:

  • while(arg[i])while(arg[i] != 0) 的评估相同,因此与for(...; j &lt; arg[i]; ..) 不同,第二个您不想减少arg[i]
  • @BeyelerStudios 那么导致双数未排序的技巧在哪里?

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


【解决方案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]
}

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 2020-05-22
    • 2016-08-02
    • 1970-01-01
    • 2019-06-24
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多