试题编号: | 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 #include using namespace std; //创建结构体-附带一个z值: 上下左右有垃圾的点坐标个数 01234 //附带一个t值: 左上 左下 右上 右下 四个点中有几个点? 01234 struct MyPoint { int x; int y; int z; int t; }; int main() { vector point;//存储所有垃圾点坐标 MyPoint mypoint; //实例化点 int a[5]; for(int i=0;i>num; int num1 = 0; int num2 = 0; //输入num个坐标 for(int i=0;i>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 #include using namespace std; struct MyPoint { int x; int y; int z; int t; }; void judge_four(vector point,int num); int main() { vector point;//存储所有垃圾点坐标 MyPoint mypoint; //实例化点 int a[5]; for(int i=0;i>num; for(int i=0;i>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 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; } }
作者:sunshine04