本题思路:用一个2行N列的二维数组存放X,Y让后 *** 作
#includeusing namespace std; int main() { int n; cin >> n;//输入垃圾点的个数 int **a = (int**)malloc(sizeof(int *)*n); //创建动态二维数组 2列n行 int i = 0,j = 0;//循环变量 bool flag1, flag2, flag3, flag4;//4个标志位 当这四个标志位都True时 这个点才能成为垃圾场 int score[5] = { 0,0,0,0,0 };//得分 for (i = 0; i < n; i++)//a[][0]=x a[][1]=y { a[i] = (int *)malloc(sizeof(int) * 2); } //初始化 for (i = 0; i < n; i++) { for (j = 0; j < 2; j++) { a[i][j] = 0; } } //输入垃圾点 for (i = 0; i < n; i++) { cin >> a[i][0] >> a[i][1]; } int count;//计分临时变量 //判断是否能成为垃圾场并且算出得分 (x,y+1) (x,y-1) (x+1,y) (x-1,y) for (i = 0; i < n; i++) { flag1 = flag2 = flag3 = flag4 = false; count = 0; for (j = 0; j < n; j++) { if (a[j][0] == a[i][0] && a[j][1] == a[i][1] + 1) flag1 = true; if (a[j][0] == a[i][0] && a[j][1] == a[i][1] - 1) flag2 = true; if (a[j][0] == a[i][0]+1 && a[j][1] == a[i][1]) flag3 = true; if (a[j][0] == a[i][0]-1 && a[j][1] == a[i][1]) flag4 = true; if (a[j][0] == a[i][0] + 1 && a[j][1] == a[i][1] + 1) count++;//顺便算分 if (a[j][0] == a[i][0] + 1 && a[j][1] == a[i][1] - 1) count++; if (a[j][0] == a[i][0] - 1 && a[j][1] == a[i][1] + 1) count++; if (a[j][0] == a[i][0] - 1 && a[j][1] == a[i][1] - 1) count++; } if (flag1&&flag2&&flag3&&flag4)// 录分 (x + 1, y + 1) (x + 1, y - 1) (x - 1, y + 1) (x - 1, y - 1) { score[count]++; } } for (i = 0; i < 5; i++) { cout << score[i] << endl; } return 0; }
如有差错请私信。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)