Create a percent sign
JavaScript (ES6), 52 bytes
n=>[...Array(n)].map((_,y,a)=>a.map(_=>y++%~-n<1|0))
Jelly, 6 bytes
²Rm’Ṭs
Try it online!
How it works
²Rm’Ṭs Main link. Argument: n
² Square; yield n².
R Range; yield [1, ..., n²].
’ Decrement; yield n-1.
m Modular; yield every (n-1)-th element of the range, staring with the first.
Ṭ Untruth; yield a Boolean array with 1's at the specified indices.
s Split the resulting array into chunks of length n, creating a matrix.
V, 15 bytes
Àé ÀÄ|r#L.|ò.kl
Try it online!
Explanation
Àé<space> " Argument times insert a space
ÀÄ " Argument times duplicate this line
" This gives an arg-by-arg matrix of spaces
" and brings the cursor to the end of the first line
|r# " Go to the beginning of this line and replace the first character with #
L. " Go to the end of this matrix (bottom-right corner) and replace that character with a #
| " Go to the beginning of the last line
ò " Recursively do:
. " Repeat the last action, r#, replace the character under the cursor with #
kl " Go 1 up and 1 right