-2

numbers(int MSD,int num)関数を として呼び出すと、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

再帰を使用できます...(または以下のコードを反復コードに変換します)この例では、標準出力に出力しますが、生成された数値で必要なことを行うことができます。

私はあなたの正確な要求に一致するようにコードを修正し、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 に答える