-2

我必须编写一个函数numbers(int MSD,int num),这样如果我调用函数 as numbers(5,4),它应该生成所有大于 5000 的 4 位数字,其中后续数字更大。

例如

它应该输出

5678
5679
5689
5789
6789

这是唯一可能的一组 4 位数字,其中后续数字大于前面的数字。

相似性numbers(3,3)应该输出:

345
346
347
348
349
356
357
358
359
...
...
456
457
...
789

希望我把我的问题说清楚了。尝试了很多,但我无法实现逻辑。

谢谢

4

1 回答 1

2

您可以使用递归...(或将下面的代码转换为迭代代码)在此示例中我打印到 std 输出,但您可以使用生成的数字做任何您想做的事情。

我修复了代码以匹配您的确切要求,并添加了 pow 的幼稚实现。

int Pow(int a, int b)
{
    int res = a;
    for (int i = 0 ; i < b-1 ; ++i)
    {
        res *= a;
    }

    return res;
}

void numbersInternal(int MSD,int num,int _base)
{       
    if (num == 1)
    {
        for (int j = MSD ; j <= 9 ; ++j)
        {
           cout << _base + j << endl;    
        }
    }
    else
    { 
        for (int j = MSD ; j <= 9-num+1 ; ++j)
        {
            numbersInternal(j + 1,num-1,_base + Pow(10,num-1)*j);        
        }
    }

}

void numbers(int MSD,int num)
{    
    numbersInternal(MSD,num,0);
}
于 2013-10-14T09:10:51.870 回答