目录
前言
1.正方形
2.直角三角形(左直角边)
循环变量初始化:i=0(行),j=0(列)循环条件:外循环i;内循环j<=i循环变量改变情况:i++,>
3.直角三角形(右直角边)
(2个内循环)循环变量初始化:i=1(行),j=1(列:打印*号),k=1(列:打印空格)循环条件:外循环i<=n;内循环(注意内循环的先后顺序)k<=n-1,j<=i循环变量改变情况:i++, j++,k++
(1个内循环+if-else)循环变量初始化:i=1,j=1内循环if-else语句打印"* "条件:i>n-j(否则打印" ");循环变量改变情况:i++, j++
4.翻转直角三角形(左直角边)
循环变量初始化:i=n(行),j=0(列)循环条件:外循环i>0;内循环j循环变量改变情况:i--,>
5.翻转直角三角形(右直角边)
循环变量初始化:(2个内循环)i=n(行),j=0(列),k=0(列)循环条件:外循环i>0;内循环k,>
6.K形图案
K形图案可以分解为两个部分:翻转直角三角形 + 直角三角形需要注意的是,翻转直角三角形的最后一行和直角三角形的第一行重合仅需翻转直角三角形少打印最后一行 或者 直角三角形从第二行开始打印即可
7.金字塔
循环变量初始化:i=0(行),j=0(列:打印*号),k=n-1(列打印空格)循环条件:外循环ii, j<=i循环变量改变情况:i++, j++,k--;内循环k>
8.翻转金字塔
循环变量初始化:i=n(行),j=0(列:打印*号),k=0(列打印空格)循环条件:外循环i>0;内循环k,>
9.菱形
菱形可以分解为两个部分:金字塔 + 翻转金字塔
10.箭形图案
箭形可以分解为两个部分:斜三角形 + 翻转斜三角形
第一部分:
循环变量初始化:i=0(行),j=0(列:打印*号),k=0(列打印空格)循环条件:外循环i<=n;内循环k,>
第二部分:
循环变量初始化:i=n(行),j=0(列:打印*号),k=n(列打印空格)循环条件:外循环i>0;内循环k>=i, j循环变量改变情况:i--,>
11.反斜线图案
循环变量初始化:i=0(行),kk=0(列)循环条件:外循环i;内循环>
12.正斜线图案
循环变量初始化:i=0(行),k=n(列)循环条件:外循环ii+1, 内循环结束后再打印"*\n"循环变量改变情况:i++,k--;内循环>
13.X形图案
循环变量初始化:i=0(行),j=0(列)循环条件:外循环i;内循环j
14.空心正方形
循环变量初始化:i=0(行),j=0(列)循环条件:外循环i0&&i0&&j)(否则打印">)&&(j>;内循环j
15.空心三角形
循环变量初始化:i=0(行),j=0(列)循环条件:外循环i;内循环j<=i,内循环if-else语句打印"*"条件:(i==n-1)||(j==0)||(j==i)(否则打印">
16.数字三角形
循环变量初始化:i=1(行),j=1(列)循环条件:外循环i<=n;内循环j<=i,内循环直接打印j的值就可以了,注意空格循环变量改变情况:i++,j++
总结
看到上面这些各式各样的精美图形,你是否会有尝试一下的冲动呢 ?本专题对部分常见的简单题做了一些分析和总结。
多组输入,对每组输入的n,输出一个n*n的正方形
正方形演示代码 int main() { int n; while (~scanf("%d", &n)) { int i, j; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) printf("* "); printf("\n"); } } return 0; }
直角三角形(左直角边)演示代码
int main() {
int n;
while (~scanf("%d", &n))
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
printf("* ");
printf("\n");
}
}
return 0;
}
实际上很多2个内循环的问题都可以用if-else语句减少一个内循环
直角三角形(右直角边)演示代码
int main() {
int i, j, k;
while (~scanf("%d", &k))
{
for (i = 1; i <= k; i++)
{
for (j = 1; j <= k; j++)
{
if (i > k - j)
printf("* ");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
int main() {
int n;
while (~scanf("%d", &n))
{
int i, j;
for (i = n; i > 0; i--)
{
for (j = 0; j < i; j++)
printf("* ");
printf("\n");
}
}
return 0;
}
int main() {
int n;
while (~scanf("%d", &n))
{
int i, j, k;
for (i = n; i > 0; i--)
{
for (k = 0; k < n-i; k++)
{
printf(" ");
}
for (j = 0; j < i; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
int main() {
int n;
int i,j;
while(~scanf("%d",&n))
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n-i;j++)
printf("* ");
for(j=0;j<=i;j++)
printf(" ");
printf("\n");
}
for(i=n;i>=1;i--)
{
for(j=0;j<=n-i+1;j++)
printf("* ");
for(j=1;j<=i;j++)
printf(" ");
printf("\n");
}
}
return 0;
}
int main() {
int n;
while (~scanf("%d", &n))
{
int i, j, k;
for (i = 0; i < n; i++)
{
for (k = n - 1; k > i; k--)
printf(" ");
for (j = 0; j <= i; j++)
printf("* ");
printf("\n");
}
}
return 0;
}
int main() {
int n;
while (~scanf("%d", &n))
{
int i, j, k;
for (i = n; i > 0; i--)
{
for (k = 0; k < n - i; k++)
printf(" ");
for (j = 0; j < i; j++)
printf("* ");
printf("\n");
}
}
return 0;
}
int main() {
int n;
int i,j;
while(~scanf("%d",&n))
{
for(i=0;i<=n;i++)
{
for(j=0;j=1;i--)
{
for(j=0;j<=n-i;j++)
printf(" ");
for(j=1;j<=i;j++)
printf("* ");
printf("\n");
}
}
return 0;
}
我们以输入n=4为例子,详细解析一下菱形图案
i<2*n+1 行
j<2*n+1 列
012345678
0 *
1 * *
2 * * *
3 * * * *
4* * * * *
5 * * * *
6 * * *
7 * *
8 *
整个菱形图案的中心点坐标为(n,n)
以(n,n)为中心,分别是一圈空格,一圈*号;
所有*号的存在范围边界线为菱形的4条边
这4条边内(包括边界线)的坐标点满足:|i-n| + |j-n| <= n ("|"为绝对值符号);
每一行*号和空格的间隔关系,与i、j、n的奇偶相关,找到它们的关系
(i + j + n)%2 == 0 就打印*号
请看代码
#include
#include
int main() {
int arr[100][100] = { 0 };
int n = 0;
while (~scanf("%d", &n))
{
int i, j;
int k = 2 * n + 1;
for (i = 0; i < k; i++)
{
for (j = 0; j < k; j++)
{
if ((abs(i - n) + abs(j - n) <= n) && (n + i + j) % 2 == 0)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
int main()
{
int n;
while (~scanf("%d", &n))
{
int i, j, k;
for (i = 0; i <= n; i++)
{
for (k = 0; k < n - i; k++)
printf(" ");
for (j = 0; j < i + 1; j++)
printf("*");
printf("\n");
}
for (i = n; i > 0; i--)
{
for (k = n; k >= i; k--)
printf(" ");
for (j = 0; j < i; j++)
printf("*");
printf("\n");
}
}
return 0;
}
int main()
{
int n;
while (~scanf("%d", &n))
{
int i, k;
for (i = 0; i < n; i++)
{
for (k = 0; k < i; k++)
printf(" ");
printf("*\n");
}
}
return 0;
}
int main() {
int n, i, k;
while (~scanf("%d", &n))
{
for (i = 0; i < n; i++)
{
for (k = n; k > i + 1; k--)
printf(" ");
printf("*\n");
}
}
return 0;
}
int main()
{
int n;
while (~scanf("%d", &n))
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i == j || i + j == n - 1)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
int main() {
int n;
while (~scanf("%d", &n))
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if ((i > 0 && i < n - 1) && (j > 0 && j < n - 1))
printf(" ");
else
printf("* ");
}
printf("\n");
}
}
return 0;
}
int main() {
int n;
while (~scanf("%d", &n))
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
if ((i==n-1)||(j==0)||(j==i))
printf("* ");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
int main() {
int n;
while (~scanf("%d", &n))
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
printf("%d ", j);
}
printf("\n");
}
}
return 0;
}