试题编号: | 201912-2 |
试题名称: | 回收站选址 |
时间限制: | 1.0s |
内存限制: | 512.0MB |
问题描述: |
|
/* date:2020/1/30
* project:ccf 2019/12/2
* time consuming:90min
* result:
提交编号 用户名 姓名 试题名称 提交时间 代码长度 编程语言 评测结果 得分 时间使用 空间使用
1736526 <--> <---> 回收站选址 01-30 16:44 1.288KB C++ 正确 100 46ms 552.0KB
*/
#include <iostream>
#include <vector>
using namespace std;
//创建<点>结构体-附带一个z值: 上下左右有垃圾的点坐标个数 01234
//附带一个t值: 左上 左下 右上 右下 四个点中有几个点? 01234
struct MyPoint
{
int x;
int y;
int z;
int t;
};
int main()
{
vector<MyPoint> point;//存储所有垃圾点坐标
MyPoint mypoint; //实例化点
int a[5];
for(int i=0;i<5;i++){
a[i]=0;
}
int num;//存储垃圾点总共的个数
cin>>num;
int num1 = 0;
int num2 = 0;
//输入num个坐标
for(int i=0;i<num;i++){
cin>>mypoint.x>>mypoint.y;
mypoint.z = 0;
mypoint.t = 0;
point.push_back(mypoint);
}
//计算num个坐标点的 z 与 t
for(int i=0;i<num;i++){
num1 = 0;
num2 = 0;
for(int j=0;j<num;j++){
if(point[j].x==point[i].x&&point[j].y==point[i].y+1){
num1++;
}
else if(point[j].x==point[i].x&&point[j].y==point[i].y-1){
num1++;
}
else if(point[j].x==point[i].x-1&&point[j].y==point[i].y){
num1++;
}
else if(point[j].x==point[i].x+1&&point[j].y==point[i].y){
num1++;
}
if(point[j].x==point[i].x-1&&point[j].y==point[i].y+1){
num2++;
}
else if(point[j].x==point[i].x+1&&point[j].y==point[i].y+1){
num2++;
}
else if(point[j].x==point[i].x-1&&point[j].y==point[i].y-1){
num2++;
}
else if(point[j].x==point[i].x+1&&point[j].y==point[i].y-1){
num2++;
}
}
point[i].z = num1;
point[i].t = num2;
}
for(int i=0;i<num;i++){
if(point[i].z==4){//首先确保此坐标是回收站
a[point[i].t]++;
}
}
for(int i=0;i<5;i++){
cout<<a[i]<<endl;
}
// //输出向量中的 num 个坐标值
// for(int i = 0; i < num; i++)
// {
// cout << point[i].x <<" "<< point[i].y <<" "<< point[i].z<<endl;
// }
}
总结:
感觉我写的非常垃圾,有个问题,就是当我把判断每个点的 z 与 t 那一大段代码【z指的是(x,y)上下左右四个中有几个有垃圾的?t指的是(x,y)左上左下右上右下四个对角中有几个有垃圾的?】,写成 judge_four函数时,结果就不对了!!!输出是5个零00000。
/* 得分:10 分 */
#include <iostream>
#include <vector>
using namespace std;
struct MyPoint
{
int x;
int y;
int z;
int t;
};
void judge_four(vector<MyPoint> point,int num);
int main()
{
vector<MyPoint> point;//存储所有垃圾点坐标
MyPoint mypoint; //实例化点
int a[5];
for(int i=0;i<5;i++){
a[i]=0;
}
int num;//存储垃圾点总共的个数
cin>>num;
for(int i=0;i<num;i++){
cin>>mypoint.x>>mypoint.y;
mypoint.z = 0;
mypoint.t = 0;
point.push_back(mypoint);
}
judge_four(point, num);
for(int i=0;i<num;i++){
if(point[i].z==4){//首先确保是回收站
a[point[i].t]++;
}
}
for(int i=0;i<5;i++){
cout<<a[i]<<endl;
}
}
//判断一个坐标点的上下左右四个点中有几个点? 01234
void judge_four(vector<MyPoint> point,int num){
int num1;
int num2;
for(int i=0;i<num;i++){
num1 = 0;
num2 = 0;
for(int j=0;j<num;j++){
if(point[j].x==point[i].x&&point[j].y==point[i].y+1){
num1++;
}
else if(point[j].x==point[i].x&&point[j].y==point[i].y-1){
num1++;
}
else if(point[j].x==point[i].x-1&&point[j].y==point[i].y){
num1++;
}
else if(point[j].x==point[i].x+1&&point[j].y==point[i].y){
num1++;
}
if(point[j].x==point[i].x-1&&point[j].y==point[i].y+1){
num2++;
}
else if(point[j].x==point[i].x+1&&point[j].y==point[i].y+1){
num2++;
}
else if(point[j].x==point[i].x-1&&point[j].y==point[i].y-1){
num2++;
}
else if(point[j].x==point[i].x+1&&point[j].y==point[i].y-1){
num2++;
}
}
point[i].z = num1;
point[i].t = num2;
}
}