fork download
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. const int LINE_CHARS_MAX = 20;
  6.  
  7. void wordInLine(int &isWordInLineParam, int iParam,
  8. char lineParam[LINE_CHARS_MAX + 1],
  9. char wordParam[LINE_CHARS_MAX + 1], int &lineLengthParam,
  10. int wordLengthParam, int &lineWordsNoParam) {
  11. isWordInLineParam = 1;
  12. if (iParam == 1) {
  13. strcat(lineParam, wordParam);
  14. } else {
  15. strcat(lineParam,"*");
  16. ++lineLengthParam;
  17. strcat(lineParam, wordParam);
  18. }
  19. lineLengthParam += wordLengthParam;
  20. ++lineWordsNoParam;
  21. }
  22.  
  23. void linesFinish(int &isWordInLineParam, int &iParam,
  24. /*
  25. cosmin
  26. 2025-01-04 23:55:37
  27. split this function into multiple functions and make the code more easier to understand. Make a function that prints a word, a function that prints a sequence of *
  28. */
  29. char lineParam[LINE_CHARS_MAX + 1],
  30. char wordParam[LINE_CHARS_MAX + 1], int &lineLengthParam,
  31. int &lineWordsNoParam, int &versColumnsNoParam,
  32. int &lineNoParam, int &versLinesNoParam, int &wordsNoParam) {
  33. int interspacesNo = 0, spacesLeftNo = 0;
  34. if (lineWordsNoParam > 1) {
  35. interspacesNo = (versColumnsNoParam - lineLengthParam +
  36. lineWordsNoParam - 1) / (lineWordsNoParam - 1);
  37. spacesLeftNo = (versColumnsNoParam - lineLengthParam +
  38. lineWordsNoParam - 1) % (lineWordsNoParam - 1);
  39. }
  40. char *p = strchr(lineParam, '*') , lineBuilder[LINE_CHARS_MAX + 1];
  41. int lineLastPos = -1, j = -1;
  42. lineBuilder[0] = '\0';
  43. while (p) {
  44. int currentPos = p - lineParam;
  45. for (int k = lineLastPos + 1; k < currentPos; ++k) {
  46. lineBuilder[++j] = lineParam[k];
  47. lineLastPos = k + 1;
  48. }
  49. for (int k = currentPos; k < currentPos + interspacesNo; ++k) {
  50. lineBuilder[++j] = '*';
  51. }
  52. if (spacesLeftNo > 0) {
  53. lineBuilder[++j] = '*';
  54. --spacesLeftNo;
  55. }
  56. p = strchr(p + 1, '*');
  57. }
  58. for (int k = lineLastPos + 1; k <= lineLengthParam; ++k) {
  59. lineBuilder[++j] = lineParam[k];
  60. }
  61. strcpy(lineParam, lineBuilder);
  62. cout << lineParam;
  63. if (isWordInLineParam == 0) {
  64. if (lineNoParam == versLinesNoParam) {
  65. cout << "\n";
  66. lineNoParam = 0;
  67. }
  68. ++lineNoParam;
  69. strcpy(lineParam, wordParam);
  70. lineWordsNoParam = 1;
  71. lineLengthParam = strlen(lineParam);
  72. lineLastPos = -1;
  73. cout << "\n";
  74. if (iParam == wordsNoParam) {
  75. cout << lineParam;
  76. }
  77. }
  78. }
  79.  
  80. int main() {
  81. int wordsNo, versLinesNo, versColumnsNo;
  82. cin >> wordsNo >> versLinesNo >> versColumnsNo;
  83. char word[LINE_CHARS_MAX + 1];
  84. char line[LINE_CHARS_MAX + 1];
  85. line[0] = '\0';
  86. int lineWordsNo = 0, lineNo = 1;
  87. for (int i = 1; i <= wordsNo; ++i) {
  88. cin >> word;
  89. int wordLength = strlen(word), lineLength = strlen(line);
  90. int isWordInLine = 0;
  91. if (lineLength + wordLength < versColumnsNo) {
  92. wordInLine(isWordInLine, i, line, word, lineLength, wordLength,
  93. lineWordsNo);
  94. }
  95. if (i == wordsNo || (i < wordsNo && isWordInLine == 0)) {
  96. linesFinish(isWordInLine, i, line, word, lineLength, lineWordsNo,
  97. versColumnsNo, lineNo, versLinesNo, wordsNo);
  98. }
  99. }
  100. return 0;
  101. }
Success #stdin #stdout 0s 5280KB
stdin
9 4 10
Afara
este
foarte
cald.
Nu
mergem
astazi
la
padure!
stdout
Afara*este
foarte
cald.***Nu
mergem

astazi**la
padure!