等比例缩放照片
题目描述
如图所示的一张照片(图0),可以把它的宽度或者高度减小从而减少照片的尺寸(如图2、3、4)。但只有等比例缩放的情况下照片才是最好看的,如图4;图2照片被压扁,图3照片被拉长给定图片的原始尺寸以及n组要压缩的尺寸,请问哪组压缩后的数据的宽高比最接近原始数据?如果有多组压缩尺寸的宽高比都是一样的且都是最接近原始数据的,那么输出压缩后面积最小的那组数据。
输入第1行,2个整数x和y,代表图片的原始尺寸的宽和高第2行,一个整数n,代表接下来有n组压缩后的尺寸 (n<=100)接下来n行,每行2个数,代表n组压缩后的宽和高(确保输入的宽 = 高) (本题所有照片的宽高均在1-10000之间)输出
宽高比和原始图片最接近的宽高数据,如果有多组这样的数,输出面积最小的那组(不存在多组宽高比和原始数据一样接近且面积又一样的数据)
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double a[110][4];
const int S=3;
const int AB=2;
double x,y;
cin>>x>>y;
double ab=x/y;
double s=x*y;
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i][0]>>a[i][1];
a[i][AB]=a[i][0]/a[i][1];
a[i][S]=a[i][0]*a[i][1];
}
double min=99999;
for(int i=0;i<n;i++)
{
a[i][AB]=abs(ab-a[i][AB]);
if(a[i][AB]<min)
{
min=a[i][AB];
}
}
double min2=99999;
for(int i=0;i<n;i++)
{
if(a[i][AB]==min)
{
if(a[i][S]<min2)
{
min2=a[i][S];
}
}
}
for(int i=0;i<n;i++)
{
if(a[i][S]==min2)
{
cout<<a[i][0]<<" "<<a[i][1];
return 0;
}
}
return 0;
}
图像叠加
题目描述
给出两幅相同大小的黑白图像 (用 0-1 矩阵) 表示,0 表示白点,1 表示黑点,求两幅图像叠加后的图像。
说明: 若两幅图像在相同位置上的像素点都是白色,叠加后为白色,否则为黑色
输入格式
第一行包含两个整数 m 和 n,表示图像的行数和列数,中间用单个空格隔开<= m <= 100,1<= n <= 100。之后 m 行,每行 n 个整数 0或 1,表示第一幅黑白图像上各像素点的颜色相邻两个数之间用单个空格隔开。之后 m 行,每行 n个整数 0或 1,表示第二幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。
输出格式
m 行,每行 n 个整数,表示叠加后黑白图像上各像素点的颜色。
样例样例输入
3 3
101
001
110
110
001
001
样例输出
111
001
111
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a[110][110];
int b[110][110];
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>b[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j]==0&&b[i][j]==0)
{
a[i][j]=0;
}
else
{
a[i][j]=1;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}