1.打印直角三角形
老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的带空格直角三角形图案。 输入描述: 多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。 输出描述: 针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。
示例1
输入:
5
输出:
*
* *
* * *
* * * *
* * * * *
示例2
输入:
4
输出:
*
* *
* * *
* * * *
#include <stdio.h> int main() { int n=0; while(~scanf("%d",&n)) { int i=0,j=0; for(i=0;i<n;i++) { for(j=0;j<n-i-1;j++) { printf(" "); } for(j=0;j<i+1;j++) { printf("* "); } printf("\n"); } getchar(); } return 0; }
2.打印翻转金字塔
老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转金字塔图案。 输入描述: 多组输入,一个整数(2~20),表示翻转金字塔边的长度,即“*”的数量,也表示输出行数。 输出描述: 针对每行输入,输出用“*”组成的金字塔,每个“*”后面有一个空格。
示例1
输入:
5
输出:
* * * * *
* * * *
* * *
* *
*
示例2
输入:
6
输出:
* * * * * *
* * * * *
* * * *
* * *
* *
*
#include <stdio.h> int main() { int n=0; while(~scanf("%d",&n)) { int i=0,j=0; for(i=0;i<n;i++) { for(j=0;j<i;j++) { printf(" "); } for(j=0;j<n-i;j++) { printf("* "); } printf("\n"); } } return 0; }
3.打印菱形
老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。 输入描述: 多组输入,一个整数(2~20)。 输出描述: 针对每行输入,输出用“*”组成的菱形,每个“*”后面有一个空格。
示例1
输入:
2
输出:
*
* *
* * *
* *
*
示例2
输入:
3
输出:
*
* *
* * *
* * * *
* * *
* *
*
示例3
输入:
4
输出:
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
#include <stdio.h> int main() { int n=0; int i=0,j=0; while(~scanf("%d",&n)) { //打印上三角 for(i=1;i<n;i++) { for(j=1; j<=n-i; j++) { printf(" "); } for(j=1; j<=2*i-1; j++) { printf("*"); } printf("\n"); } //打印倒三角 for(i; i>=1; i--) { for(j=1; j<=n-i; j++) { printf(" "); } for(j=1; j<=2*i-1; j++) { printf("*"); } printf("\n"); } } return 0; }
4.打印K形
老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的K形图案。 输入描述: 多组输入,一个整数(2~20)。 输出描述: 针对每行输入,输出用“*”组成的K形,每个“*”后面有一个空格。
示例2
输入:
2
输出:
* * *
* *
*
* *
* * *
示例2
输入:
3
输出:
* * * *
* * *
* *
*
* *
* * *
* * * *
示例3
输入:
4
输出:
* * * * *
* * * *
* * *
* *
*
* *
* * *
* * * *
* * * * *
#include <stdio.h> int main() { int n=0; while(~scanf("%d",&n)) { int i=0,j=0; //打印上一行 for(i=0;i<n;i++) { for(j=0;j<n+1-i;j++) { printf("* "); } printf("\n"); } //打印下一行 for(i=0;i<n+1;i++) { for(j=0;j<i+1;j++) { printf("* "); } printf("\n"); } } return 0; }
5.打印箭形
老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。 输入描述: 本题多组输入,每行一个整数(2~20)。 输出描述: 针对每行输入,输出用“*”组成的箭形。
示例1
输入:
2
输出:
*
**
***
**
*
示例2
输入:
3
输出:
*
**
***
****
***
**
*
示例3
输入:
4
输出:
*
**
***
****
*****
****
***
**
*
#include <stdio.h> int main() { int n=0; while(~scanf("%d",&n)) { int i=0,j=0; //上层 for(i=0;i<n;i++) { for(j=0;j<n-i;j++) { printf(" "); } for(j=0;j<i+1;j++) { printf("*"); } printf("\n"); } //下层 for(i=0;i<n+1;i++) { for(j=0;j<i;j++) { printf(" "); } for(j=0;j<n+1-i;j++) { printf("*"); } printf("\n"); } } }
6.打印空心正方形
老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。 输入描述: 多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。 输出描述: 针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。
示例1
输入:
4
输出:
* * * *
* *
* *
* * * *
示例2
输入:
5
输出:
* * * * *
* *
* *
* *
* * * * *
#include <stdio.h> int main() { int n=0; while(~scanf("%d",&n)) { int i=0,j=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==0||i==n-1) printf("* "); else if(j==0||j==n-1) printf("* "); else printf(" "); } printf("\n"); } } return 0; }
7.打印“空心”三角形图案
老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”三角形图案。 输入描述: 多组输入,一个整数(3~20),表示输出的行数,也表示组成三角形边的“*”的数量。 输出描述: 针对每行输入,输出用“*”组成的“空心”三角形,每个“*”后面有一个空格。
示例1:
4
输出:
*
* *
* *
* * * *
示例2
输入:
5
输出:
*
* *
* *
* *
* * * * *
#include <stdio.h> int main() { int n=0; while(~scanf("%d",&n)) { int i=0,j=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j||i==n-1||j==0) printf("* "); else printf(" "); } printf("\n"); } } return 0; }
8.打印数字三角形
老师给他出了一系列打印图案的练习,该任务是打印用数字组成的数字三角形图案。 输入描述: 多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。 输出描述: 针对每行输入,输出用数字组成的对应长度的数字三角形,每个数字后面有一个空格。
示例1:
输入:
4
输出:
1
1 2
1 2 3
1 2 3 4
示例2
输入:
5
输出:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
#include <stdio.h> int main() { int n=0; while(~scanf("%d",&n)) { int i=0,j=0; for(i=0;i<n;i++) { for(j=1;j<=i+1;j++) { printf("%d ",j); } printf("\n"); } } return 0; }
9.打印X形
老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。 输入描述: 多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。 输出描述: 针对每行输入,输出用“*”组成的X形图案。
示例1
输入:
5
输出:
* *
* *
*
* *
* *
示例2
输入:
6
输出:
* *
* *
**
**
* *
* *
#include <stdio.h> int main() { int n=0; while(~scanf("%d",&n)) { int i=0,j=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(j==i||j==(n-i)-1)//n-1:与i相反 { printf("*"); } else printf(" "); } printf("\n"); } } return 0; }
10.打印空心菱形
输入一个奇数 n,输出一个由 *
构成的 n 阶空心菱形。
输入格式:一个奇数 n。
输出格式:输出一个由 *
构成的 nn 阶实心菱形。
输入样例:
5
输出样例:
*
* *
* *
* *
*
输入样例:
11
输出样例:
*
* *
* *
* *
* *
* *
* *
* *
* *
* *
*
算法:
到中心单元的曼哈顿距离
在二维空间中 i,ji,j 两点的曼哈顿距离可以表示为 d(i,j)=|xi−xj|+|yi−yj|d(i,j)=|xi−xj|+|yi−yj| (横、纵坐标差值的绝对值之和)。
此题目可认为是使得到中心单元的曼哈顿距离满足一定条件即打印星号。
上图示例输入为 n=5时的情况,使用不同颜色区分各单元到中心单元的曼哈顿距离。输入奇数 nn,坐标 (n/2,n/2)表示 n∗n方阵中的中心单元。
对于满足题目条件的任意菱形,总是会出现相似的结构。菱形即为与此 n∗n 方阵中心的曼哈顿距离不超过 n/2的所有单元的集合。
因此,打印‘*’的判断条件是 abs(i−n/2)+abs(j−n/2)<=n/2。
#include<iostream> #include<cmath> using namespace std; int main() { int n; cin>>n; int x=n/2,y=n/2;//中心坐标 for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if ( abs(i-x) + abs(j-y) == n / 2 ) cout << "*"; else cout << " "; } cout<<endl; } return 0; }
11. 打印杨辉三角
KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。
输入描述:
第一行包含一个整数数n。 (1≤n≤30)
输出描述:
包含n行,为杨辉三角的前n行,每个数输出域宽为5。
示例1
输入:
6
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
#include <stdio.h> int main() { int n=0; scanf("%d",&n); int arr[30][30]={0}; int i=0,j=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(j==0||i==j)//控制俩边为1 { arr[i][j]=1; } if(i>1&&j>0)//控制中间内容 { arr[i][j]=arr[i-1][j-1]+arr[i-1][j]; } } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i>=j)//打印下三角部分 { printf("%5d",arr[i][j]);//注意域宽 } } printf("\n"); } return 0; }
12.打印爱心
效果:
#include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { float x, y, a; for (y = 1.5; y > -1.5; y -= 0.1) { for (x = -1.5; x < 1.5; x += 0.05) { a = x * x + y * y - 1; putchar(a * a * a - x * x * y * y * y <= 0.0 ? '*' : ' '); } //效果: system("color 0c"); putchar('\n'); } printf("\t\t\t 打印爱心"); printf("\n\n"); return 0; }