webank机器学习方向的编程题大家做的怎么样?

第一道10%,第三道70%。算法渣,不知道自己问题出在哪,贴上来大家讨论讨论,求赐教。

第一道:提示时间超限
import sys
s = map(int, raw_input().split(' '))
g = 2**s[0]+2**s[1]-2**s[2]
a = 0 while g>15:
    g /= 16  a += 1 n = str(bin(g)).split('b')
ls = map(int, list(n[1]))
sys.stdout.write(str(sum(ls)+a*4))

#笔试题目#
全部评论
第一题: #include <iostream> #include <vector> #include <map> #include <cstring> #include <string> #include <algorithm> using namespace std; int main() { ios::sync_with_stdio(false); //freopen("input.txt", "r", stdin); int a, b, c; cin >> a >> b >> c; cout << b - c + 1 << endl; return 0; }
点赞 回复 分享
发布于 2018-04-16 21:07
第三道: import sys n = int(raw_input()) def huiw(n): a = [-1]*(n+1) while n>=0: if a[n] == -1: s = int(str(bin(n)).split('b')[1]) m = list(str(s)) b = m+[] m.reverse() if m == b: a[n] = 1   else: a[n] = 0 n -= 1   return sum(a) sys.stdout.write(str(huiw(n)))
点赞 回复 分享
发布于 2018-04-16 21:07
1+b-c,第一题答案
点赞 回复 分享
发布于 2018-04-16 21:07
啊,乱掉了,明明发的时候特地改过的
点赞 回复 分享
发布于 2018-04-16 21:07
哇,突然发现是校友!
点赞 回复 分享
发布于 2018-04-16 21:09
第一题20%,第三题70%
点赞 回复 分享
发布于 2018-04-16 21:10
第二题 public static void main(String[] args) {         Scanner in=new Scanner(System.in);         int a=1;         int n=in.nextInt();                  ArrayList<Integer> rt=new ArrayList<>();         for(int x=2;x<=n;x++) {             for(int i=2;i<x;i++){             a=1;             if(x%i==0)             {                 a=0;                 break;             }             }             if(a==1){             rt.add(x);             }         }         int sum=rt.size();         for(int i=0;i<sum;i++) {             for(int k=2;Math.pow(rt.get(i),k)<n;k++) {                 rt.add((int)Math.pow(rt.get(i),k));             }         }         System.out.println(rt.size());     }
点赞 回复 分享
发布于 2018-04-16 21:12
12ac30.7
点赞 回复 分享
发布于 2018-04-16 21:12
第二题: #include <iostream> #include <vector> #include <map> #include <cstring> #include <string> #include <algorithm> using namespace std; int arr[1005]; int ans[1005]; void init() { memset(arr, 0, sizeof(arr)); arr[0] = 1; arr[1] = 1; for (int i = 2; i <= 1000; ++i) { if (arr[i] == 0) { int tmp = i + i; while(tmp <= 1000) { arr[tmp] = 1; tmp += i; } } } for (int i = 2; i <= 1000; ++i) { if (arr[i] == 0) { int tmp = i * i; while(tmp <= 1000) { arr[tmp] = 2; tmp *= i; } } } ans[0] = 0; ans[1] = 0; for (int i = 2; i <= 1000; ++i) { if (arr[i] == 0 || arr[i] == 2) { ans[i] = ans[i-1] + 1; } else { ans[i] = ans[i-1]; } } } int main() { ios::sync_with_stdio(false); //freopen("input.txt", "r", stdin); init(); int t; cin >> t; cout << ans[t] << endl; return 0; } 第三题:数位dp,可以用dfs搞。但是手生,没调处来,ggdfs(l, r, f1, f2, f3).l表示数字开始的位,r表示数字结束的位f1表示当前数字前面有没有1f2表示前面有没有给位f3表示后面有没有借位可能可以简化。。自己代码写的太复杂了,bug没有调处来。。
点赞 回复 分享
发布于 2018-04-16 21:14

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务