2017-06-21 257 views
0

你能告诉我这两种逻辑的区别吗?第一逻辑解决所有问题,而第二逻辑解决一半问题? 你能告诉我第一个逻辑不起作用吗?有什么区别

第一逻辑

 String out = "YES"; 
     for(int j = 0; j< size-1; j++) 
     { 
      long difference = Math.abs(array[j+1] - array[j]); 
      if(difference > value) 
      { 
       out = "NO"; 
       break; 
      }  
     } 

     System.out.println(out); 

第二逻辑

 String out = "NO"; 
     for(int j = 0; j< size-1; j++) 
     { 
      long difference = Math.abs(array[j+1] - array[j]); 
      if(difference <= value) 
      { 
       out = "YES"; 
      }  
      else 
      { 
       out = "NO"; 
       break; 
      } 
     } 
     System.out.println(out); 

这里是我解决了这个问题 - >

您给出整数和你的数组需要确定任何两个连续数组整数值的绝对差值是否为在最D.

输入:
输入的第一行包含一个整数T,表示的测试用例的数量。你必须为每个测试用例提供输出。每个测试用例都包含数组的大小(N),必须检查的绝对值差异(D)以及数组本身的值。 每个测试用例的第一行包含两个整数N和D,分别表示数组的大小和D的值。 每个测试用例的第二行包含N个整数,它们被一个空格分开,并且是整数。

输出:
对于每一个测试的情况下,打印YES如果任何两个连续整数之间的绝对差为最d,否则打印NO。

限制条件:
不会有超过1000个测试用例。阵列的大小也不会大于1000和d的值将是1和100之间的数组中的整数的值将是1和106

= T 之间

< = 103
= ñ< = 103
= d < = 100
=元素阵列的< = 106

第一逻辑解决所有的测试用例但第二逻辑只解决一半的测试用例,以便第一个逻辑失败?

+1

第二个不会编译。所以就是这样。 –

+0

你在说什么测试用例?如果你知道什么样的测试失败了,你不知道第一个代码缺乏什么吗?毕竟那是什么测试用例。 –

+0

均顺利编译,唯一不同的是首先为所有情况提供解决方案,而第二个仅为半个情况提供解决方案 – hEmAnT

回答

0

这些都不将工作,因为每个将只打印一行(这里只有一个System.out.println(out),所以如果有一个以上的测试情况下,他们会失败。


评论显示经过编辑,他们'在外部循环中运行

如果数组中有单个项目,它将返回"NO",因为这是默认值,即使没有更大的差异对。

如果我们看到更多的周围代码 - size为每个测试用例正确设置,它可能会有所帮助吗?

+0

不是这样的,他们在所有的测试用例中逐个测试它。 – hEmAnT

+0

@david代码粘贴迭代在测试用例数组的**一个**上。该代码可能在迭代测试用例的for循环中 – Nathan