回收站选址
自己写的代码(只有20分)
package practice;
import java.util.ArrayList;
import java.util.Scanner;
public class test19092 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
ArrayList<Rush> arrays = new ArrayList<Rush>();
for (int i = 0; i < n; i++) {
arrays.add(new Rush(sc.nextInt(),sc.nextInt()));
}
for (int i = 0; i < n; i++) {
String str = "";
for (int j = 0; j < n; j++) {
int t = arrays.get(i).recycling(arrays.get(j));
str +=String.valueOf(t);
}
if (count(str, 1)==4) {
switch (count(str, 2)) {
case 0:
a++;
break;
case 1:
b++;
break;
case 2:
c++;
break;
case 3:
d++;
break;
case 4:
e++;
break;
}
str="";
continue;
}else {
str="";
continue;
}
}
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
}
static int count(String s1,int n)
{
int counter=0;
if (s1.indexOf(String.valueOf(n)) == -1) {
return 0;
}
while(s1.indexOf(String.valueOf(n))!=-1){
counter++;
s1=s1.substring(s1.indexOf(String.valueOf(n))+String.valueOf(n).length());
}
return counter;
}
}
class Rush{
private int x;
private int y;
public Rush(int x,int y) {
this.x = x;
this.y = y;
}
public void setX(int x) {
this.x = x;
}
public int getX() {
return x;
}
public void setY(int y) {
this.y = y;
}
public int getY() {
return y;
}
public int recycling(Rush rush) {
int t = (rush.getX()-this.x)*(rush.getX()-this.x)+(rush.getY()-this.y)*(rush.getY()-this.y);
return t;
}
}
满分答案
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int array[][]=new int[n][2];
int a[]=new int[n];
int b[]={0,0,0,0,0};
for(int i=0;i<n;i++){
a[i]=0;//a[]用于记录每个点相邻点个数
for(int j=0;j<2;j++){
array[i][j]=input.nextInt();
}
}
for(int i=0;i<n;i++){//对每个点相邻点个数进行计算
for(int j=0;j<n;j++){
if(j==i)
continue;
else{
if(array[i][0]-1==array[j][0]&&array[i][1]==array[j][1]){
a[i]++;
}
if(array[i][0]+1==array[j][0]&&array[i][1]==array[j][1]){
a[i]++;
}
if(array[i][1]-1==array[j][1]&&array[i][0]==array[j][0]){
a[i]++;
}
if(array[i][1]+1==array[j][1]&&array[i][0]==array[j][0]){
a[i]++;
}
}
}
}
for(int k=0;k<n;k++){//计算每个对角点个数
int count=0;
if(a[k]==4){
for (int j = 0; j < n; j++) {
if (array[k][0] - 1 == array[j][0]&&array[k][1] - 1 == array[j][1]) {
count++;
}
if (array[k][0] - 1 == array[j][0]&&array[k][1] + 1 == array[j][1]) {
count++;
}
if (array[k][0] + 1 == array[j][0]&&array[k][1] - 1 == array[j][1]) {
count++;
}
if (array[k][0] + 1 == array[j][0]&&array[k][1] + 1 == array[j][1]) {
count++;
}
}
b[count]++;
}
}
for(int l=0;l<5;l++){
System.out.println(b[l]);
}
}
}
总结
正确答案的思路为,设置一个二维数组(需要学习),然后进行两次判断,第一次是判断相邻点的个数,就是一个循环来判断,相邻为一的个数,依次循环,若碰到自己,就跳过,然后,通过加减一位横纵坐标的方式,来判断上下左右,是否可以和每个点重合,其中相邻的个数用数组来记录(是个很好的方式),使用数组的时候可以很好的记录那些点为有相邻点(用的二维数组记录,根据二维数组的行),判断重合即可。同样用数组记录个数。
技能:二维数组,使用数组来记录数量。