Shape Rule
j % 2 alternates 0 and 1
Row 1 prints 1, row 2 prints 10, row 3 prints 101, and so on as width grows.

The alternating binary number triangle with an ascending inner loop prints each row starting with 1 and alternating 0/1 as width grows. This tutorial covers the shape rule, loop structure, a live preview, algorithm steps, worked C++ examples, edge cases, and complexity.
j % 2 alternates 0 and 1
Row 1 prints 1, row 2 prints 10, row 3 prints 101, and so on as width grows.
Rows
for (i = 1; i <= rows; i++) makes each new row one digit longer than the previous.
1..i ascending
for (j = 1; j <= i; j++) prints j % 2 while counting up, so every row starts with 1.
Same line / next line
Binary digits use cout << j % 2; end each row with cout << "\n".
1–20 rows
Pick a row count and draw the ascending-inner binary triangle instantly in the browser.
Complexity
Total digit prints still = n(n+1)/2; extra memory stays O(1).
An alternating binary number triangle (starting with 1) grows each row by one digit while alternating between 0 and 1 using the modulo operator. With rows = 5, the output is 1, 10, 101, 1010, 10101.
In C++ you solve it with an ascending outer loop and an ascending inner loop: for (j = 1; j <= i; j++) prints j % 2, then cout << "\n" ends each row.
It is a natural follow-up to Program 15 — same modulo idea, different inner-loop direction.
j % 2 yields 0 for even j, 1 for odd j.
j = 1 up to i makes every row start with 1.
cout << j % 2 in the inner loop; cout << "\n" after.
Follow Program 15 (descending inner); continue to Program 17 (left-shifted odd numbers).
In short: for each row i from 1 to rows, print j % 2 for j from 1 up to i, then call cout << "\n".
Given a positive integer rows, print an alternating binary number triangle starting with 1: row i has i digits from j % 2 as j counts up from 1 to i.
// rows = 5 (conceptual shape)
// 1
// 10
// 101
// 1010
// 10101 | Item | Type | Description |
|---|---|---|
rows | int | Number of triangle lines to print (typically ≥ 1). |
| Printed output | text | Each row has i alternating binary digits from j % 2. |
for i from 1 to rows:
for j from 1 to i:
print j % 2 (no newline)
print newline | Approach | Idea | Best for |
|---|---|---|
Ascending inner + j % 2 | 1, 10, 101, … | Learning and interviews |
Flip with 1 - (j % 2) | Start rows with 0 instead of 1 | Parity inversion variant |
| Program 15 variant | Descending inner loop | Produces 1, 01, 101, … |
| Goal | Pattern |
|---|---|
| Walk each row | for (i = 1; i <= rows; i++) |
| Print binary digit | for (j = 1; j <= i; j++) cout << j % 2; |
| End the row | cout << "\n"; |
| Flip parity | cout << 1 - (j % 2); |
| Program 15 variant | for (j = i; j >= 1; j--) cout << j % 2 (descending inner) |
| Row + column parity | cout << (i + j) % 2; |
Same binary triangle family — inner-loop direction changes the row shape.
parityEven j → 0, odd j → 1
flippedInverts every digit — row 1 starts with 0
asc innerThis page — produces 1, 10, 101, …
compare 15Try Program 15’s descending inner loop next
Reach for this pattern when teaching the modulo operator inside nested loops.
Natural follow-up after Program 15 — same modulo, different inner-loop direction.
Outer/inner bound practice with an immediate visual check.
Combine loops with cin for a flexible row count.
Compare Program 15 (descending inner loop) and Program 17 (left-shifted odd numbers) next.
This is a console teaching pattern — not how you build modern app screens.
Key benefit: one small program that locks in nested loops, output sequencing, and O(n²) thinking.
Choose a row count between 1 and 20 and draw the alternating binary triangle in the browser.
Three complete C++ programs — fixed rows, a flip variant, and a user-input version. Click View Output to reveal sample console results.
Print five rows of the ascending-inner binary triangle with j % 2.
rows = 5Hard-coded height — ideal for first demos and screenshots.
#include <iostream>
using namespace std;
int main() {
int rows = 5;
int i, j;
for (i = 1; i <= rows; ++i) {
for (j = 1; j <= i; ++j) {
cout << j % 2;
}
cout << "\n";
}
return 0;
} When i = 1, the inner loop prints 1 % 2 = 1. When i = 3, it prints 1%2=1, 2%2=0, 3%2=1 as 101, and so on as row width grows. cout << "\n" after the inner loop starts the next row.
Invert parity so the first row starts with 0 instead of 1.
1 - (j % 2)Start each row with 0 instead of 1 by inverting the parity output.
#include <iostream>
using namespace std;
int main() {
int rows = 5;
int i, j;
for (i = 1; i <= rows; ++i) {
for (j = 1; j <= i; ++j) {
cout << 1 - (j % 2);
}
cout << "\n";
}
return 0;
} 1 - (j % 2) flips every digit: where j % 2 was 1 it prints 0, and vice versa. Row 1 becomes 0 instead of 1.
Read the row count at runtime and scale the binary triangle.
Read rows with cin >> rows and apply the same j % 2 logic.
#include <iostream>
using namespace std;
int main() {
int rows;
int i, j;
cout << "Enter the number of rows: ";
cin >> rows;
for (i = 1; i <= rows; ++i) {
for (j = 1; j <= i; ++j) {
cout << j % 2;
}
cout << "\n";
}
return 0;
} Same nested-loop core as Example 1; only the source of rows changes. Non-numeric input sets cin’s fail bit if you ignore errors — always validate in safer labs.
#include <iostream> brings in cout and cin. Set rows (fixed or from input).
for (i = 1; i <= rows; i++) makes each row one digit longer than the previous.
for (j = 1; j <= i; j++) prints j % 2 with cout to alternate 0 and 1.
cout << "\n" ends the row so the next outer iteration starts fresh.
Total digit prints: 1+2+…+n = n(n+1)/2 — O(n²) time, O(1) extra memory.
rows = 4Trace each outer-loop value of i and note the j % 2 values printed as j counts up.
i | Inner j order | j % 2 values | Printed row |
|---|---|---|---|
1 | 1 | 1 | 1 |
2 | 1, 2 | 1, 0 | 10 |
3 | 1, 2, 3 | 1, 0, 1 | 101 |
4 | 1, 2, 3, 4 | 1, 0, 1, 0 | 1010 |
Total digit prints: 1 + 2 + 3 + 4 = 10 = 4×5/2.
Where this tiny pattern (and its loop structure) shows up beyond the homework prompt.
Clearest visual proof that outer and inner bounds interact.
Example: change j <= i and watch the shape change.
Foundation for inverted, pyramid, diamond, and hollow variants.
Example: use (i + j) % 2 for row+column parity grids.
Practice cout << (j % 2) vs row newline without complex math.
Example: put cout << "\n" inside the inner loop by mistake.
Swap digits for letters, stars, or spaced output once the loop works.
Example: print j + " " for spaced digits on each row.
Triangular totals make O(n²) concrete for beginners.
Example: count printed digits for n = 10 still → 55.
Pair the pattern with cin.fail() checks and positive-row checks.
Example: reject rows <= 0 and re-prompt.
Pro Tip: when an interviewer asks for patterns, explain the outer/inner roles first — then write the loops. The story matters as much as the code.
Why this pattern earns a permanent spot in beginner C++ courses.
Wrong bounds show up immediately as a broken staircase.
Only loops and console output — no arrays or math libraries.
Invert, center, hollow, or change the fill character with small edits.
Streaming output needs no storage beyond loop counters.
Pro Tip: learn ascending inner loop first; compare with Program 15’s descending inner loop to see how direction changes each row.
Small habits that keep number-pattern code clean.
Use rows (or n) and keep i/j for row/column — or rename to row/col.
cinCheck the return value so bad input does not leave rows uninitialized.
Only call cout << "\n" after the inner loop finishes the row.
Run both pages with the same rows to see how inner-loop direction changes output.
Trace rows = 5 on paper before coding larger demos.
Pro Tip: if the output is a vertical list of single digits per line, you almost certainly put cout << "\n" inside the inner loop.
Mistakes that commonly break alternating binary number patterns.
Each digit lands on its own line — you get a column, not a triangle.
→ Use cout << j % 2 for binary digits; cout << "\n" only after the inner loop.
Counting j down instead of up produces Program 15’s shape (01 on row 2).
→ For this shape, keep for (j = 1; j <= i; j++).
Omitting cout << "\n" glues every digit onto one endless line.
→ Always end the row after the inner loop.
Letters or empty input leave rows unset.
→ Check cin.fail() and re-prompt on failure.
Switching to i = 0 without adjusting the inner bound prints an empty first row or wrong counts.
→ If 0-based, print i with wrong inner bound (e.g. j <= i + 1).
Check these inputs before calling the solution done.
Output is just 1 on one line.
Outer loop never runs — print nothing or show a message.
rows < 0Treat as invalid; re-prompt instead of silent empty output.
Output grows as n²/2 characters — fine for labs, noisy for huge n.
Unchecked cin leaves rows unset — check the return value.
cout << j prints 1,2,3… — use cout << j % 2 for binary output.
Try these variations to lock in the pattern.
j = i down to 11 - (j % 2) so row 1 starts with 0cout << (i + j) % 2 for a checkerboard-style gridn rows.cout << j % 2 stays on the line; cout << "\n" advances — mix them carefully.rows > 0 for interactive programs; rows = 1 should print a single 1.Quick Takeaway: outer loop grows row length, inner loop prints j % 2 ascending, then break the line.
| Program | Time | Extra space |
|---|---|---|
| Nested loops (Examples 1–2) | O(rows²) | O(1) |
| User input (Example 3) | O(rows²) | O(1) |
The alternating binary number triangle with an ascending inner loop is a compact lesson in how loop direction changes output. Master the j % 2 version, then compare with Program 15’s descending inner loop.
Practice the three examples above, then continue to Program 17 for the left-shifted odd number triangle.
Use for (j = 1; j <= i; j++) with cout << j % 2 — keep cout << "\n" for the break, and validate row counts when reading input.
j = 1..i before codingcout << j % 2 for digits and cout << "\n" after each rowrows ≥ 1 for interactive programscin.fail() before using rowscout << "\n" inside the inner digit loopj directly instead of j % 2j down when you meant this page’s ascending inner looprows = 1 edge casePrint the pattern the beginner-friendly way.
j % 2 alternates 0 and 1
DefinitionCounts j up to i
Codej % 2 picks digit
LogicEnds each row
I/OO(n²) time
AnalysisEach row prints alternating 0 and 1 using j % 2. The inner loop counts up from 1 to i, so every row starts with 1 — still O(n²) total prints.
Move on to the left-shifted odd number triangle in the C++ number-pattern series.
12 people found this page helpful