您的位置:首页 > 其它

hdu 4577 X-Boxes

2016-07-03 11:32 260 查看
这道题是数学题,数学渣表示只能打表找规律,以下为打的表:

1 2 4 

3 6 12 

5 10 20 

7 14 28 
8 16 32 

9 18 36 

11 22 44 

13 26 52 

15 30 60 

17 34 68 

19 38 76 

21 42 84 

23 46 92 
24 48 96 

25 50 100 

27 54 108 

29 58 116 

31 62 124 

33 66 132 

35 70 140 

37 74 148 

39 78 156 
40 80 160 

41 82 164 

43 86 172 

45 90 180 

47 94 188 

49 98 196 

......

我打了第一位最大100,k==3的表,很容易发现奇数全部出现,但是乱入的偶数是什么鬼(上面已用红字标明)。好吧,那我就把这些偶数全都提出来如下,最左边为提出来的偶数,除以8后得到一组神奇的数,这组数不就是原数列的第一位。可想而知这些偶数的集合除以一个常数后就变成了原问题,只不过规模变小了(因为除以一个常数),那么这个常数是什么呢,就是2^(k),哈哈是不是很神奇。

出现在其中的偶数 /8== ?

8 /8== 1

24 /8== 3

40 /8== 5

56 /8== 7

64 /8== 8

72 /8== 9

88 /8== 11

import java.util.*;
import java.io.BufferedInputStream;
import java.lang.*;
import java.math.*;

class Task{
void solve(){
Scanner in=new Scanner(new BufferedInputStream(System.in));
int t;
t=in.nextInt();
while(t-->0){
int k=3;
int [] a=new int[1000];
Arrays.fill(a, 0);
ArrayList<Integer> res=new ArrayList();
for(int i=1;i<100;i++){
if( a[i]==0 ){
if( (i&1)==0 )res.add(i);
for(int j=0;j<k;j++){
System.out.print( i*(1<<j) +" ");
a[ i*(1<<j) ]=1;
}
System.out.println();
}
}
System.out.println("出现在其中的偶数 /8== ?");
for( Integer i:res ){
System.out.println(i+" /8== "+i/8);
}
}
in.close();
}
}
public class Main {
public static void solve(){
Scanner in=new Scanner(new BufferedInputStream(System.in));
int t=in.nextInt();
while(t-->0){
BigInteger n=in.nextBigInteger();
int k=in.nextInt();
BigInteger tmp=BigInteger.valueOf(1<<(k-1));
BigInteger ans=BigInteger.ZERO;
while( n.compareTo(BigInteger.ZERO)==1 ){
ans=ans.add(n.divide(tmp).add(BigInteger.ONE).divide(BigInteger.valueOf(2)));
n=n.divide(tmp.multiply(BigInteger.valueOf(2)));
}
System.out.println(ans);
}

}
public static void main(String[] args) {
solve();
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: