蓝桥题目:B-16、分解质因数,B-17、矩阵乘法,B-18、矩形面积交

B-16、分解质因数

#include <iostream>
using namespace std;

#define N 10001 //多一位方便从1开始计数 

bool num[N];//默认都为 false 看作为质数 

//标记所有非质数为 true
void init(){
	int i, j;
	for(i = 2; i < N; ++i){
		if(!num[i]){
			//厄拉多塞筛法 
			for(j = i * i; j < N; j += i){
				num[j] = true;
			}
		}
	}
}

//分解质因数 
void judge(int n){
	if(!num[n]){       //本身即为质数 
		cout << n;
	}else{
		for(int j = 2; j <= n; ++j){
			if(n % j == 0){          //找出质因数 j 
				cout << j << "*";
				n /= j;              //除去 j 
				judge(n);            //递归判断新数 
				break;
			}
		}
	}
	
}

int main() {
	
    init();
    
	int a, b, i;
	cin >> a >> b;
	
	for(i = a; i <= b; ++i){
		cout << i << "=";
		judge(i);
		cout << endl;
	}
    return 0;
}

B-17、矩阵乘法

#include <iostream>
using namespace std;

int main(){
	
	int n, m, i, j;
	cin >> n >> m;
	
	int **a = new int*[n];
	for(i = 0; i < n; ++i){
		a[i] = new int[n];
	}
	
	for(i = 0; i < n; ++i){
		for(j = 0; j < n; ++j){
			cin >> a[i][j];
		}
	}
	//判断零次幂,输出单位矩阵 
	if( m == 0){
		for(i = 0; i < n; ++i){
			for(j = 0; j < n; ++j){
				if( i == j){
					cout << 1 << " ";
				}else{
					cout << 0 << " ";
				}
			}
			if(i != n-1)
			cout << endl;
		}
		return 0;
	}
	
	//申请数组保存结果 
	int **ans = new int*[n];
	for(i = 0; i < n; ++i){
		ans[i] = new int[n];
	}
	for(i = 0; i < n; ++i){
		for(j = 0; j < n; ++j){
			ans[i][j] = a[i][j];
		}
	}
	
	//申请数组暂存运算中的和 
	int **temp = new int*[n];
	for(i = 0; i < n; ++i){
		temp[i] = new int[n];
	}
	
	int k, l;
	m -= 1;
	while(m--){
		for(i = 0; i < n; ++i){
			for(j = 0; j < n; ++j){
				temp[i][j] = 0;
				for(k = 0; k < n; ++k){
					temp[i][j] += ans[i][k] * a[k][j];
				}
			}
		}
		for(i = 0; i < n; ++i){
			for(j = 0; j < n; ++j){
				ans[i][j] = temp[i][j];
			}
		}
	}
	
	
	for(i = 0; i < n; ++i){
		for(j = 0; j < n; ++j){
			cout << ans[i][j] << " ";
		}
		if(i != n-1)
		cout << endl;
	}
	
	return 0;
} 

B-18、矩形面积交


因为是矩形,且是对角坐标,所以两个坐标的x,y可以直接提取出来最大的和最小的作为主对角线上的顶角。

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;

struct point{
	double x, y;
}a, b, c, d, m, n;//相交矩形的右上角坐标m, 左下角坐标n 

int main()
{
	cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y >> d.x >> d.y;
	
	m.x = min( max(a.x, b.x), max(c.x, d.x));
	m.y = min( max(a.y, b.y), max(c.y, d.y));
	n.x = max( min(a.x, b.x), min(c.x, d.x));
	n.y = max( min(a.y, b.y), min(c.y, d.y));
	
	if(m.x > n.x && m.y > n.y){
	cout << setiosflags(ios::fixed) << setprecision(2);
	cout << (m.x - n.x) * (m.y - n.y) << endl;
	}
	else
	cout<< "0.00" <<endl;
	return 0;
}
发布了31 篇原创文章 · 获赞 2 · 访问量 6193

猜你喜欢

转载自blog.csdn.net/Yuyao_Xu/article/details/104071014