对于第一次考试,老师说去虐一虐初一的,看看题目,竟然有几题做过,然后就飘了…,有大佬AK了,我却20几名,连几个初一的都比不过…
回到正文
##第一题
给定三个坐标,输出第四个坐标,使这四个坐标连成一个矩形
很水的一道题,找出三个坐标中和其他两个不同的x坐标和y坐标就行了
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x1,x2,y1,y2,x3,y3;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
cout<<(x1^x2^x3)<<' '<<(y1^y2^y3);
return 0;
}
位运算大法好
##第二题
蜗牛爬井,白天上爬x,晚上下落y
我们数学老师说的,就是小学一年级数学题…
强模拟也行
#include<bits/stdc++.h>
using namespace std;
int a,b,v;
int ans=0;
int main()
{
cin>>a>>b>>v;
if ((v-a)%(a-b)==0)
cout<<(v-a)/(a-b)+1;
else
cout<<(v-a)/(a-b)+2;
return 0;
}
十分简单,
##第三题
**从n个数中找出偶数的个数以及它们的和 **
题目=题解
#include<bits/stdc++.h>
using namespace std;
int n;
int sum=0,num=0;
int x;
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>x;
if (x%2==0)
sum+=x,num++;
}
cout<<num<<' '<<sum<<endl;
return 0;
}
##第四题
找到一串数中最大值和次大值,以及它们的位置
用结构体存储一下数值和位置,再用sort从大到小排序,输出第一和第二个
#include<bits/stdc++.h>
using namespace std;
struct big
{
int x,y;
}a[110];
int n;
bool mycmp(big a,big b)
{
return (a.x>b.x);
}
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
cin>>a[i].x,a[i].y=i;
sort(a+1,a+n+1,mycmp);
cout<<a[1].x<<' '<<a[1].y<<endl<<a[2].x<<' '<<a[2].y;
return 0;
}
##第五题
描述有点长:给你只有’.‘和’X’组成的地图,’.'为海洋,'X’为陆地,边界为海洋,被海洋三面或四面包围的陆地几天后会被淹没,输出几天后包含所有陆地的最小矩形
先模拟一遍,把陆地转化为海洋,再从四个方向逐渐压缩,记录上下左右四条边的值,输出这个矩形
#include<bits/stdc++.h>
using namespace std;
char a[20][20]={};
int n,m;
int up=1,down,rightt,leftt=1;
bool cover(int i,int j)//四个方向判断是否被三面包围
{
int n=0;
if (a[i-1][j]=='.')
n++;
if (a[i+1][j]=='.')
n++;
if (a[i][j+1]=='.')
n++;
if (a[i][j-1]=='.')
n++;
if (n>=3)
return true;
else
return false;
}
bool empty(bool p,int x)//判断这条直线是否都是海洋
{
bool k=true;
if (p)//判断的直线是行
{
for (int i=1;i<=m;i++)
if (a[x][i]=='X')//是陆地
k=false;
}
else//判断的直线是列
{
for (int i=1;i<=n;i++)
if (a[i][x]=='X')
k=false;
}
if (k)
return true;//可以推进
else
return false;//不能推进
}
int main()
{
cin>>n>>m;
down=n;
rightt=m;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
cin>>a[i][j];
for (int i=1;i<=n;i++)//边缘为海洋,有点繁琐
a[i][0]='.';
for (int i=1;i<=m;i++)
a[0][i]='.';
for (int i=1;i<=n;i++)
a[i][m+1]='.';
for (int i=1;i<=m;i++)
a[n+1][i]='.';
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (a[i][j]=='X')
if (cover(i,j))//将三面环海的陆地淹没
a[i][j]='!';//它在那时不是真正的海洋,所以要用其他字符
while (empty(1,up))//从上往下压缩
up++;
while (empty(1,down))//从下往上压缩
down--;
while (empty(0,leftt))//从右往左压缩
leftt++;
while (empty(0,rightt))//从左往右压缩
rightt--;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (a[i][j]=='!')//是即将要被淹没的陆地
a[i][j]='.';//成为海洋
for (int i=up;i<=down;i++)//输出矩形
{
for (int j=leftt;j<=rightt;j++)
cout<<a[i][j];
cout<<endl;
}
return 0;
}
正文结束
总的来说,错的还是一些小错误,比如运算符优先级错误等等,数学方法还是挺有用的,能缩短很多时间复杂度
结束