笔试结束后,写了写第二道题 没有进行测试,不知道大数情况下会不会出错 function loopFractional (a, b) { var isExit = function (i) { if(mods[i] != undefined) { return true; } return false; } var ints = parseInt(a/b); var j = 2; var mods = {}; var flag = true; if(ints != 0) { var r = ints + '.'; }else { var r = 0 + '.'; } a = a%b; var i = 0; var s = ''; var loop = false; while(j <= 10000 && flag) { j++; a = a * 10; //如果a能整除b,那么存入余数,跳出循环。 if(a % b == 0) { mods[a%b] = j; s += a / b; flag = false; break; } //如果不能整除,检测a/b的余数是否已经存在,如果已经存在,那么跳出循环. if(isExit(a % b)) { i = mods[a % b]; loop = true; flag = false; break; } //如果不能整除,检测a/b的余数不存在,存入余数,继续循环 if(a % b != 0) { mods[a % b] = j; s += parseInt(a / b); a = a % b; a = a * 10; } } var result = r + s; console.log(i, j); if(j <= 10000) { var suffix = '(' + result.substr(i-1, j - i) + ')'; } if(!loop) { return result; } return result + suffix; }
AC了第一道,写下代码 function Coin(n) { var a = []; var ou = 0; var ji = 0; function jiecheng (n, m) { var _m = m; if(n&m == _m) { return 1; } return 2; } for (var i = 0; i <= n; i++) { var r = jiecheng(n, i); if(r == 2) { ou++; }else { ji++; } }; return ji + '' + '\n' + ou; }
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int n = sc.nextInt();
long x = (1<<n)-1;
Map<Long,Integer> map = new HashMap<>();
while(x>=0) {
long c = count(x);
if(map.containsKey(c)) {
int r = map.get(c);
map.put(c,r+1);
}else {
map.put(c,1);
}
x--;
}
long q = 0;
long o = 0;
for(Map.Entry<Long,Integer> entry:map.entrySet()) {
int re = entry.getValue();
if(re%2==0) {
o++;
}else{
q++;
}
}
System.out.println(q);
System.out.println(o);
}
}
public static Long count(long a) {
long count = 0;
while(a!=0) {
a = a&(a-1);
count++;
}
return count;
}
}