在Java Whet上需要创建算法将根据输入值返回结果 例如:
......
我不预先知道数据,我只知道他们填充的算法
我已经开始使用下一个代码:
public int getAmountOfUnits(int duration ) {
if (duration >= 1 && duration <= 7) return 0;
if (duration >= 8 && duration <= 82) {}
return 1;
}
有人可以帮助我吗?
答案 0 :(得分:1)
这是使用Arrays.binarySearch
的解决方案,
static int indexInRanges(int[] rangeEndPoints, int value) {
int bsPos = Arrays.binarySearch(rangeEndPoints, value);
if (bsPos < 0)
return ~bsPos;
else
return bsPos;
}
// test code
public static void main (String[] args) throws java.lang.Exception
{
int[] rangeEndPoints = { 7, 22, 37, 52, 67, 82, 90, 114, 138, 162, 186, 210, 234, 258, 282, 306, 330, 354 };
System.out.println("1 -> " + indexInRanges(rangeEndPoints, 1));
System.out.println("40 -> " + indexInRanges(rangeEndPoints, 40));
System.out.println("350 -> " + indexInRanges(rangeEndPoints, 350));
}
此代码不会尝试处理更一般的情况,例如:
或者,您可以将if < 0
等事物写为return bsPos ^ (bsPos >> 31)
,但要以降低其作用为代价。
作为一种特殊情况,由于您的大多数范围都是相同的大小,因此您可以仅通过几个if/else
情况和某些划分来破解某些内容,但是这会用特别困难的方式对范围列表进行硬编码改变方式。
答案 1 :(得分:0)
有多种方法可以完成此任务。这是一种简单的算法。
import java.util.Scanner;
class search{
public static void main(String a[]){
Scanner sc=new Scanner(System.in);
System.out.print("Enter Value :");
int value=sc.nextInt();
System.out.print("Enter increment value :");
int increment=sc.nextInt();
int i;
int counter=0;int c=0;
int[] result={1,8,23,38,53,68,83,91,115,139,163,187,211,235,259,283,307,331};
for(i=0;i<result.length;i++){
counter++;
if(value<=(result[i]+increment)){
System.out.print("result is :" + (counter-1));
counter=0;
c++;
break;
}
}
if(c==0){
System.out.print("Not found!");
}
}
}