排版类小结:输出三角形、梯形、平行四边形、菱形、矩阵的旋转、杨辉三角

51 阅读2分钟

输出左三角

输入:
3
输出:
  *
 **
***

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //左三角 
	int n;
	cin>>n;
	for(int i=1; i<=n; i++){
		for(int j=n-i; j>=1; j--)
			cout<<" ";
		for(int j=1; j<=i; j++)
			cout<<"*";
		cout<<endl;
	}
	return 0;
} 

输出右三角

输入:
3
输出:
*
**
***

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //右三角 
	int n;
	cin>>n;
	for(int i=1; i<=n; i++){
		for(int j=1; j<=i; j++)
			cout<<"*";
		for(int j=n-i; j>=1; j--)
			cout<<" ";
		cout<<endl;
	}
	return 0;
}

上对称三角

输入:
3
输出:
  *
 ***
*****

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //上对称三角 
	int n;
	cin>>n;
	for(int i=1; i<=n; i++){
		for(int j=1; j<=(n-i); j++)
			cout<<" ";
		for(int j=1; j<=2*i-1; j++)
			cout<<"*";
		cout<<endl;
	}	
	return 0;
}

下对称三角

输入:
3
输出:
*****
 ***
  *

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //下对称三角 
	int n;
	cin>>n;
	for(int i=n; i>=1; i--){
		for(int j=1; j<=n-i; j++)
			cout<<" ";
		for(int j=1; j<=2*i-1; j++)
			cout<<"*";
		cout<<endl;
	}
	return 0;
}

右梯形

输入:
2 4
输出:
**
***
****

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //右梯形 
	int x,y; //梯形的上下边长
	cin>>x>>y; 
	while(x<=y){
		for(int i=1; i<=y-x+1; i++){
		for(int j=1; j<=x; j++)
			cout<<"*";
		x++;
		cout<<endl;
		}
	}
	return 0;
}

左梯形

输入:
2 4
输出:
  **
 ***
****

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //左梯形 
	int x,y;
	cin>>x>>y;
	while(x<=y){
		for(int i=1; i<=y-x+1; i++){
		for(int j=y-x; j>=1; j--)
			cout<<" ";
		for(int k=1; k<=x; k++)
			cout<<"*";
		x++;
		cout<<endl;
		}
	}
	return 0;
}

对称梯形

输入:
2 4
输出:
  **
 ****

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //对称梯形 
	int x,y;
	cin>>x>>y;
	while(x<=y){
		for(int i=1; i<=(y-x)/2+1; i++){ //行数
			for(int j=1; j<=(y-x)/2; j++)
				cout<<" ";
			for(int k=1; k<=x; k++)
				cout<<"*"; 
			x+=2;
			cout<<endl;
		} 
	}
	//对称梯形:输入时,x必须大于1,且x和y相差2,因为对称。所以x和y要么全奇数要么全偶数 
	return 0;
}

平行四边形

输入:
3
输出:
   ***
  ***
 ***

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //平行四边形 
	int m;
	cin>>m; //m为行数和每行个数 
	for(int i=1; i<=m; i++){ //行数 
		for(int j=m-i; j>=1; j--)
			cout<<" ";
		for(int k=1; k<=m; k++) 
			cout<<"*";
		cout<<endl;
	} 
	return 0;
}

菱形

输入:
3
输出:
   *
  ***
 *****
  ***
   *

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //菱形
	int n;
	cin>>n;
	for(int i=1; i<=n; i++){ //上半部分 行数 
	 	for(int j=1; j<=n-i; j++)
			cout<<" ";
		for(int k=1; k<=2*i-1; k++)
			cout<<"*";
		cout<<endl; 
	} 
	for(int i=n-1; i>=1; i--){ //下半部分 行数
	 	for(int j=1; j<=n-i; j++)
			cout<<" ";
		for(int k=1; k<=2*i-1; k++) 
			cout<<"*";
		cout<<endl;
	}
	return 0;
} 

矩阵顺时针旋转90°

输入:
3
1 2 3
4 5 6
7 8 9
输出:
7 4 1
8 5 2
9 6 3

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //顺时针旋转90° (列出来,找规律)
	int a[100][100]={0},b[100][100]={0};
	int m;
	cin>>m; //m行m列矩阵。若行列不相等,旋转,叫矩阵的转置! 
	for(int i=1; i<=m; i++){
		for(int j=1; j<=m; j++)
			cin>>a[i][j]; 
	} 
	for(int i=1; i<=m; i++){
		for(int j=1; j<=m; j++){
			b[j][m-i+1]=a[i][j];
		}
	}
	for(int i=1; i<=m; i++){
		for(int j=1; j<=m; j++)
			cout<<b[i][j]<<" ";
		cout<<endl;
	}
	
	return 0;
}

矩阵顺时针旋转180°

输入:
3
1 2 3
4 5 6
7 8 9
输出:
9 8 7
6 5 4
3 2 1

具体实现

法1

#include<bits/stdc++.h>
using namespace std;
int main(){ //矩阵顺时针旋转180°
	//以3*3的矩阵为例可以发现:一三行替换,中间行不动。一三列替换,中间列不动,即可 
	int a[100][100];
	int b[100][100];
	int m;//m行m列
	cin>>m;
	for(int i=1; i<=m; i++)
		for(int j=1; j<=m; j++)
			cin>>a[i][j];
	for(int i=1; i<=m; i++)
		for(int j=1; j<=m; j++)
			b[m-i+1][m-j+1]=a[i][j];
	for(int i=1; i<=m; i++){
		for(int j=1; j<=m; j++)
			cout<<b[i][j]<<" ";	
		cout<<endl;	
	}	
	return 0;
}

法2

#include<bits/stdc++.h>
using namespace std;
int main(){ //矩阵顺时针旋转180°
	//顺时针旋转90°,再旋转90°,即可。 
	int a[100][100];
	int b[100][100];
	int m;//m行m列
	cin>>m;
	for(int i=1; i<=m; i++)
		for(int j=1; j<=m; j++)
			cin>>a[i][j];
	for(int i=1; i<=m; i++)
		for(int j=1; j<=m; j++)
			b[j][m-i+1]=a[i][j];
	for(int i=1; i<=m; i++)
		for(int j=1; j<=m; j++)
			a[j][m-i+1]=b[i][j];
	for(int i=1; i<=m; i++){
		for(int j=1; j<=m; j++)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}		
	return 0;
}

数组上下翻转

输入:
3
1 2 3
4 5 6
7 8 9
输出:
7 8 9
4 5 6
1 2 3

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){ //数组上下翻转   此类题的规律:找数组下标,变化规律 
	int a[100][100];
	int b[100][100];
	int n;
	cin>>n; 
	for(int i=1; i<=n; i++){
		for(int j=1; j<=n; j++)
			cin>>a[i][j];
	}
	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++)
			b[n-i+1][j]=a[i][j]; 
	for(int i=1; i<=n; i++){
		for(int j=1; j<=n; j++)
			cout<<b[i][j]<<" ";
		cout<<endl;
	}
	return 0;
}

杨辉三角

输入:
4
输出:
1
11
121
1331

具体实现

#include<bits/stdc++.h>
using namespace std; //杨辉三角 
int main(){
	int n;
	int a[21][21]={0};
	cin>>n;
	if(n>0){
		a[1][1]=1;
		for(int i=2; i<=n; i++){ //行数 
			for(int j=1; j<=i; j++){
				a[i][j]=a[i-1][j]+a[i-1][j-1]; //core
			} 
		}
		for(int i=1; i<=n; i++){
			for(int j=1; j<=i; j++)
				cout<<a[i][j];
			cout<<endl;
		}
	}
	return 0;
}

小结

看数组下标,找规律。