5个级别的数字
第一级为1-50,第2级从51开始,每个数字对应的区间为50,第5级为最后的级别
例子:
第1级 第2级 第3级 第4级 第5级
51 同样的有50个区间 依次类推 第5级后面就没有了。
1 52
53
...
100
2 101
3
4
...
50
求当前数字为 X(X>0 为正整数,不会超过第5级的最大值) 时,得到第5级的区间,当x为第5级的数字时,提示当前为第5级.
小弟数学不好,哪位大神帮下忙,谢谢!
------解决方案--------------------------------------------------------
实在是没太看懂。
是5个区间,每个区间是50个数,然后随便录入一个数,问这个数在哪个区间?
如果这样,那除以50就好了,结果是几,再加1就对了。
应该不是这么简单的要求吧?
------解决方案--------------------------------------------------------
- Java code
class Main { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(getLevel(3)); System.out.println(getLevel(53)); System.out.println(getLevel(103)); System.out.println(getLevel(153)); System.out.println(getLevel(203)); } private static String getLevel(final int x) { int left = x / 50; int right = left + 1; return "[" + (left * 50 + 1) + ", " + right * 50 + "]"; }}// result:// [1, 50]// [51, 100]// [101, 150]// [151, 200]// [201, 250]
------解决方案--------------------------------------------------------
还是不太明白LZ你的要求,LZ要求每个级别包含的元素是50的倍数,还是说之要求最大的是50的倍数?
即
第1级是 1-50
第2级是 51-2500(这样的话,51-2500只有2450个元素,最大的2500是50的倍数) --A
还是说
第2级是 51-2550(也就是说第2级有2500个元素,也就是说元素的个数是50的倍数) --B
16L的代码是 --B 的情况
如果是--A情况,改下代码就可以了
给LZ写了段测试代码
- Java code
import java.util.*;public class Test { static TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>(); static { //因为map信息是重复使用的,所以把16L的map部分抽出来 int sum = 0, times = 50; for (int i=0; i<5; i++) { map.put(sum, i+1); sum = (sum == 0 ? times : sum*times); } } public static void main(String[] args) throws Throwable { for (int i=0, j=1; i<5; i++, j*=50) { System.out.printf("边界测试当前分数:分数=%d, 级别=%d\n", j, getLevel(j)); System.out.printf("边界测试下个分数:分数=%d, 级别=%d\n", j+1, getLevel(j+1)); int k = (int)(Math.random()*j); System.out.printf("随机测试:分数=%d, 级别=%d\n", k, getLevel(k)); System.out.println(); } Scanner sc = new Scanner(System.in); System.out.print("请输入一个[1-312500000]范围内的整数:"); int score = sc.nextInt(); System.out.printf("输入的分数为:%d, 该分数对应的等级为:%d\n", score, getLevel(score)); } public static int getLevel(int score) { if (score < 1 || score > 312500000) return -1; //超出范围 return map.lowerEntry(score).getValue().intValue(); }}
------解决方案--------------------------------------------------------
昨晚忘了贴代码了。大致的思路是这样的。
- Java code
public class Test{ public static void main(){ getQUJIAN(1); } public static int[] getQUJIAN(int data){ int start; int end; start = end = 0; int lev = getLev(data); if(lev==5){ start = end = data; return new int[]{start,end}; } else{ start =(int)(data * Math.pow(5-lev)) + 1; end = start +(int)Math.pow(5-lev) - 1; return new int[]{start,end}; } } public static int getLev(int data){ int lev = 1; if(data > Math.pow(50,lev)){ data = data - (int)Math.pow(50,lev); lev++; } if(lev > 5){ throw new RuntimeException(); } }}