当前位置:   article > 正文

PAT 1068. 万绿丛中一点红(20)_pat1068java

pat1068java

就想知道同样的题,同样的思路,为什么c++就可以,而java不可以呢,真的是改得烦躁啊!!!

就是想知道为什么啊?如果有哪位大神看出来了,欢迎指正

 

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.Map.Entry;
  4. import java.util.Scanner;
  5. public class Main {
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8. Scanner scanner = new Scanner(System.in);
  9. String[] firstLine = scanner.nextLine().split(" ");
  10. int N = Integer.parseInt(firstLine[1]);
  11. int M = Integer.parseInt(firstLine[0]);
  12. int TOL = Integer.parseInt(firstLine[2]);
  13. int[][] index = {{-1, -1},{-1, 0},{-1,1},{0, -1},{0, 1},{1, -1},{1, 0},{1, 1}};
  14. int[][] pixels = new int[N + 1][M + 1];
  15. Map<Integer, Integer[]> unique = new HashMap<>();
  16. for(int i = 1; i != N + 1; i ++){
  17. String[] line = scanner.nextLine().split(" ");
  18. for (int j = 0; j != M; j++) {
  19. pixels[i][j + 1] = Integer.parseInt(line[j]);
  20. if (unique.containsKey(pixels[i][j + 1])) {
  21. unique.remove(pixels[i][j + 1]);
  22. }else {
  23. Integer[] temp = {i, j + 1};
  24. unique.put(pixels[i][j + 1], temp);
  25. }
  26. }
  27. }
  28. scanner.close();
  29. int count = unique.size();
  30. for(Entry<Integer, Integer[]> entry: unique.entrySet()){
  31. int flag = 1;
  32. for(int[] temp:index){
  33. int x = entry.getValue()[0] + temp[0];
  34. int y = entry.getValue()[1] + temp[1];
  35. if (x != 0 && y != 0 && x != (N + 1) && y != (M + 1)) {
  36. if (Math.abs(entry.getKey()-pixels[x][y]) <= TOL) {
  37. flag = 0;
  38. }
  39. }
  40. }
  41. if (flag == 0) {
  42. unique.put(entry.getKey(), null);
  43. count --;
  44. }
  45. }
  46. if (count == 1) {
  47. for(Entry<Integer, Integer[]> entry: unique.entrySet()){
  48. if (entry.getValue() != null) {
  49. System.out.print("(" + entry.getValue()[1] +", "+entry.getValue()[0] + ")" + ": " + entry.getKey());
  50. }
  51. }
  52. }else if (count > 1) {
  53. System.out.print("Not Unique");
  54. }else{
  55. System.out.print("Not Exist");
  56. }
  57. }
  58. }

运行结果:

 

 

别人的c++代码,是能够完全正确的!!!

代码地址:http://blog.csdn.net/qq_34594236/article/details/63692920

 

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<map>
  5. #include<cmath>
  6. using namespace std;
  7. map<int, int> vis;
  8. int s[1001][1001];
  9. int n, m ,tol;
  10. int dir[8][2] = {1,0, -1,0, 0,1, 0,-1, 1,1, 1,-1, -1,1, -1,-1};
  11. //判断是否大于阈值
  12. bool check(int x, int y)
  13. {
  14. for(int i=0 ;i<8 ;i++){
  15. int xx = x + dir[i][0];
  16. int yy = y + dir[i][1];
  17. if(xx>=0 && xx<n && yy<m && yy>=0 && abs(s[xx][yy]-s[x][y])<=tol ) return false;
  18. }
  19. return true;
  20. }
  21. int main(){
  22. cin>>m>>n>>tol;
  23. for(int i=0 ;i<n ;i++){
  24. for(int j=0 ;j<m ;j++){
  25. cin>>s[i][j];
  26. vis[s[i][j]] ++;
  27. }
  28. }
  29. //cnt记录只出现一次的数字的个数
  30. //x y记录坐标
  31. int cnt = 0;
  32. int x, y;
  33. for(int i=0 ;i<n ;i++){
  34. for(int j=0 ;j<m ;j++){
  35. if(vis[s[i][j]]==1 && check(i,j)){
  36. cnt++;
  37. x = i;
  38. y = j;
  39. }
  40. }
  41. }
  42. if(cnt==1){
  43. printf("(%d, %d): %d\n",y+1, x+1, s[x][y]);
  44. }
  45. else if(cnt>1){
  46. puts("Not Unique");
  47. }
  48. else{
  49. puts("Not Exist");
  50. }
  51. return 0;
  52. }

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/209773
推荐阅读
相关标签
  

闽ICP备14008679号