基础练习题解

1.矩形相交面积
问题描述
  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
  输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00

题目分析:
此题是一道利用程序解决简单数学问题的题目,重点是如何对所有的情况进行分类解决。同一平面内的两个矩形所有的情况可以分为两类,一类是两个矩形相离相交面积为0,一类是两个矩形相交,这时只需要把两个矩形的顶点横纵坐标从小到大排序然后取中间两项的差值,即为相交矩形的一条边。

#include<iostream>
#include<algorithm>

using namespace std;

double x[4], y[4];

int main()
{
	cin >> x[0] >> y[0] >> x[1] >> y[1] >> x[2] >> y[2] >> x[3] >> y[3];

	// 格式化输入,使输入都按照矩阵的左上角和右下角的顺序
	if(x[0] > x[1]) swap(x[0], x[1]);
	if(y[0] > y[1]) swap(y[0], y[1]);
	if(x[2] > x[3]) swap(x[2], x[3]);
	if(y[2] > y[3]) swap(y[2], y[3]);
	
	//判断两种情况
	if(x[0] < x[2] && x[1] < x[2] || x[2] < x[0] && x[3] < x[0] ||  
		y[0] < y[2] && y[1] < y[2] || y[2] < y[0] && y[3] < y[0])
	    printf("0.00\n");
	else 
	{
		sort(x, x + 4);
		sort(y, y + 4);
		printf("%.2f\n", (x[2] - x[1]) * (y[2] - y[1]));
	}
	return 0;
}	

2.矩阵乘法
问题描述
  给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
  例如:
  A =
  1 2
  3 4
  A的2次幂
  7 10
  15 22
输入格式
  第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
  接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
  输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
样例输出
7 10
15 22

题目分析:
矩阵相乘的公式为:
aij += aik * akj

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int N = 40;

int a[N][N], b[N][N];
int res[N][N];
int n, m;

int main()
{
	cin >> n >> m;
	
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
	    {
			scanf("%d", &a[i][j]);
			if(i == j) b[i][j] = 1;
		}
	
	memcpy(res, b, sizeof b);	//当m=0时初始化,矩阵的0次方为n阶单位矩阵
	while(m--)
	{
	    memset(res, 0, sizeof res);
		for(int i = 0; i < n; i++)
			for(int j = 0; j < n; j++)
				for(int k = 0; k < n; k++)
					res[i][j] += b[i][k] * a[k][j];
					
		memcpy(b, res, sizeof res);
	}
	
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < n; j++)
			printf("%d ", res[i][j]);
		puts("");
	}
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值