-2

ユーザーには最大20台の車両が存在する可能性があります。5つの静的フォームがあります。ユーザーの選択に基づいて、PDFをマージします。

1.pdf-1 veh、2.pdf-2 veh、3.pdf-3 veh、4.pdf-4 veh、5.df-5 veh

ユーザーが6台の車両のように5台以上の車両を所有している場合、各フォームは3+3や2+3+1などの他の組み合わせではなく5.pdf+1.pdfに対応する必要があります。20台の車両5+5 + 5 + 5,13 veh 5 + 5 + 3,7 veh 5 + 2,18 veh 5 + 5 + 5 + 3,3 veh 3. 20 ifループを書き込む代わりに、ユーザーがマージするために選択するフォームを選択するロジックを作成するのに役立つ人はいますか? 。

4

2 に答える 2

1

最初に気付くのは、フォームのバンドルが単一のフォーム1〜5であるか、またはいくつかの5つのフォームと単一のフォーム1〜5であるということです。他の組み合わせはありません。基本的には、5進数でフォームを数えているようなものです。

まず、必要な数の5.pdfフォームを処理します。フォームの数が5を超える場合は、少なくとも1つの5.pdfファイルを追加する必要があります。フォームの数が10を超える場合は、少なくとも2つの5.pdfファイルを追加する必要があります。数が5未満になるまで、5.pdfフォームを継続的に追加することで、他の方法の中でも特にそれを行うことができます。

擬似コードでは、次のことができます。

List forms = new ArrayList();
int count = <number of vehicles>

while count > 0 {
   if ( count >= 5 ) {
      forms.add( "5.pdf" );
      count = count - 5;
   } else {
      forms.add( "" + count + ".pdf" );
      count = 0;
   }
}

<forms now contains the list of all forms you need>

または、必要に応じて、次のように簡略化できます。

int numberOfFives = (formsCount / 5); // Integer division, so if formsCount = 4, numberOfFives = 0
int remainingForm = (formsCount % 5); // Remainder after division by 5

次に、連結されたPDFにnumberOfFives5.pdfフォームと単一のremainingForm.pdfフォームを追加します。

于 2013-03-22T17:33:28.213 に答える
0

目標に等しい値よりも小さい最大値を繰り返し減算する必要があるようです。例えば:

8: greatest is 5, 8-5=3
3: greatest is 3, 3-3=0, we're finished
8=5+3
于 2013-03-22T17:31:57.803 に答える