杨辉三角形2 & 旋转矩阵

210 阅读1分钟

杨辉三角形2

输入n值,求杨辉三角形中各个位置上的值。

输入描述

一个大于等于2的整型数n

输出描述

题目可能有多组不同的测试数据,对于每组输入数据, 按题目的要求输出相应输入n的杨辉三角形。

示例

输入
6
输出
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

思路

  • 先定义一个二维数组,然后定义前两个值:a[1][1]和a[1][2]均为1。

  • 循环遍历数组,核心语句是a[i][j]=a[i-1][j]+a[i-1][j-1]。

  • 最后输出数组即可。

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	int a[50][50];
	cin>>n;
	a[1][1]=1,a[1][2]=1;
	for(int i=2; i<n; i++){
		for(int j=1; j<=i+1; j++){
			a[i][j]=a[i-1][j]+a[i-1][j-1];
		}
	}
	for(int i=1; i<n; i++){
		for(int j=1; j<=i+1; j++)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}
	return 0;
} 

旋转矩阵

任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。

要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。

输入描述

输入有多组数据。 每组数据第一行输入n(1<=n<=9),从第二行开始输入两个n阶矩阵。

输出描述

判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。 如果旋转角度的结果有多个,则输出最小的那个。

示例

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

输出
90

思路

矩阵的计算主要考虑下标的变化,在纸上写出来数组的变化,找下标规律,即可。

具体实现

#include<bits/stdc++.h>
using namespace std;
//计算角度的函数
int SwitchAngle(int a[50][50] , int b[50][50] , int n){ //二维数组传参方式
	int angle,i,j;
	for(angle=0,i=0; i<n; i++){
		for(j=0; j<n; j++){
			if(angle==0){
				if(a[i][j]==b[i][j]) continue;
				else angle=90;
			}
			if(angle==90){ //90°的下标变化
				if(a[i][j]==b[j][n-i-1]) continue;
				else angle=180;
			}
			if(angle==180){ //180°的下标变化
				if(a[i][j]==b[n-i-1][n-j-1]) continue;
				else angle=270;
			}
			if(angle==270){ //270°的下标变化
				if(a[i][j]==b[n-j-1][i]) continue;
				else angle=-1;
			}
			if(angle==-1){
				break; //终止循环 
			}
		}
		if(angle==-1) break; 
	}
	return angle;
}

int main(){
	int n;
	int angle=0;
	cin>>n;
	int a[50][50],b[50][50];
	for(int i=0; i<n; i++) //输入数组1
		for(int j=0; j<n; j++)
			cin>>a[i][j];
	for(int i=0; i<n; i++) //输入数组2
		for(int j=0; j<n; j++)
			cin>>b[i][j];
	angle = SwitchAngle(a,b,n); //调用函数
	cout<<angle;
	return 0;
}

小结

continue:跳出本次循环,进行下次循环;break:结束循环。