プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

ワードラップの問題


一連の単語が指定されています。各行の文字数には制限があります。改行を入れて、線がはっきりと印刷されるようにします。

線のバランスをとる必要があります。一部の線に多くの余分なスペースがあり、一部の線に少数の余分なスペースが含まれている場合、それらを別々の線にバランスさせます。同じ数の余分なスペースを使用して、バランスをとろうとします。

このアルゴリズムは、1行に配置できる単語数と、必要な行数を生成します。

入力と出力

Input:
The length of words for each line. {3, 2, 2, 5}. The max width is 6.
Output:
Line number 1: Word Number: 1 to 1 (only one word)
Line number 2: Word Number: 2 to 3 (Second and 3rd word)
Line number 3: Word Number: 4 to 4 (4th word)

アルゴリズム

wordWrap(wordLenArr, size, maxWidth)

入力- 単語の長さの配列、配列のサイズ、および単語の最大幅。

出力- 1行に配置される単語の数のリスト。

Begin
   define two square matrix extraSpace and lineCost of order (size + 1)
   define two array totalCost and solution of size (size + 1)

   for i := 1 to size, do
      extraSpace[i, i] := maxWidth – wordLenArr[i - 1]
      for j := i+1 to size, do
         extraSpace[i, j] := extraSpace[i, j-1] – wordLenArr[j - 1] - 1
      done
   done

   for i := 1 to size, do
      for j := i+1 to size, do
         if extraSpace[i, j] < 0, then
            lineCost[i, j] = ∞
         else if j = size and extraSpace[i, j] >= 0, then
            lineCost[i, j] := 0
         else
            linCost[i, j] := extraSpace[i, j]^2
      done
   done

   totalCost[0] := 0
   for j := 1 to size, do
      totalCost[j] := ∞
      for i := 1 to j, do
         if totalCost[i-1] ≠∞ and linCost[i, j] ≠ ∞ and
            (totalCost[i-1] + lineCost[i,j] < totalCost[j]), then
            totalCost[i – 1] := totalCost[i – 1] + lineCost[i, j]
            solution[j] := i
      done
   done
   display the solution matrix
End

#include<iostream>
using namespace std;

int dispSolution (int solution[], int size) {
   int k;
   if (solution[size] == 1)
      k = 1;
   else
      k = dispSolution (solution, solution[size]-1) + 1;
   cout << "Line number "<< k << ": Word Number: " <<solution[size]<<" to "<< size << endl;
   return k;
}

void wordWrap(int wordLenArr[], int size, int maxWidth) {
   int extraSpace[size+1][size+1];
   int lineCost[size+1][size+1];
   int totalCost[size+1];
   int solution[size+1];

   for(int i = 1; i<=size; i++) {    //find extra space for all lines
      extraSpace[i][i] = maxWidth - wordLenArr[i-1];

      for(int j = i+1; j<=size; j++) {    //extra space when word i to j are in single line
         extraSpace[i][j] = extraSpace[i][j-1] - wordLenArr[j-1] - 1;
      }
   }

   for (int i = 1; i <= size; i++) {    //find line cost for previously created extra spaces array

      for (int j = i; j <= size; j++) {

         if (extraSpace[i][j] < 0)
            lineCost[i][j] = INT_MAX;
         else if (j == size && extraSpace[i][j] >= 0)
            lineCost[i][j] = 0;
         else
            lineCost[i][j] = extraSpace[i][j]*extraSpace[i][j];
      }
   }

   totalCost[0] = 0;
   for (int j = 1; j <= size; j++) {    //find minimum cost for words
      totalCost[j] = INT_MAX;

      for (int i = 1; i <= j; i++) {
         if (totalCost[i-1] != INT_MAX && lineCost[i][j] != INT_MAX && (totalCost[i-1] + lineCost[i][j] < totalCost[j])){
            totalCost[j] = totalCost[i-1] + lineCost[i][j];
            solution[j] = i;
         }
      }
   }

   dispSolution(solution, size);
}

main() {
   int wordLenArr[] = {3, 2, 2, 5};
   int n = 4;
   int maxWidth = 6;
   wordWrap (wordLenArr, n, maxWidth);
}

出力

Line number 1: Word Number: 1 to 1
Line number 2: Word Number: 2 to 3
Line number 3: Word Number: 4 to 4

  1. MicrosoftWordで画像と画像の周りにテキストを折り返す方法

    Microsoft Wordは、ドキュメントを作成するための非常に便利なツールです。このツールを使用すると、テキストを入力するだけでなく、ドキュメントに画像を含めて、ドキュメントをよりわかりやすくすることができます。このような配置を表示すると、読者は、追加された画像がテキストの個々の文字とうまく整列しているように感じることができます。ただし、ユーザーが非常に困惑しているのは、Wordの画像の周りにテキストを折り返す方法です。これは、MicrosoftWordで画像をテキストで囲む方法を示す投稿です。 。 Wordで画像をテキストで囲む Word文書を開き、[形式]タブを選択します。メニューの

  2. Microsoft Wordで画像の周りにテキストをラップする方法は?

    Microsoft Wordは、ドキュメント、履歴書、レター、およびレポートを作成できるワードプロセッサです。ほとんどの場合、ユーザーはドキュメントにテキストのみを必要とします。ただし、画像、記号、アートワークを追加する必要がある場合もあります。ドキュメントに写真を追加することは、重要な情報を説明するための優れた方法です。人間はまた、言葉よりも簡単に写真を処理します。 Microsoft Wordでは、ユーザーは画像をランダムに追加したり、画像の周りにテキストを折り返したりすることができます。この記事では、画像の周りにテキストを折り返す方法について説明します。 MicrosoftWordで