3-19网易有道C++笔试部分题解

话说今天的题目有点恶心了 80min。3.75/4。 全坑到第二个题上了,最后还整个类似pm答的题,设计啥中文错误检索,随便答了一下
又看了一下美团的题,好家伙,更恶心哈哈哈 就剩40分钟了直接放弃睡觉去了
第一题 n个数,均分给m个人,是否有方案可行
第二题表达式求职
第三题a * b = c * d 所有方案
第四题 矩阵乘法幂次加和
表达题汉子错误检索

第一题数据很小,直接暴力dfs就行。 n个数,均分给m个人,是否有方案可行

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, m;
const int maxx = 1e5 + 7;
ll a[maxx];
ll nowNum[20];
bool flag = 0;
ll ans = 0;
void dfs(int index){
    if(flag) return ;
    if(index == n + 1){
        for(int i = 1; i <=m ;i++){
            if(nowNum[i] != ans) return ;
        }
        flag = 1;
    }
    for(int i = 1; i <=m ;i++){
        if(nowNum[i] > ans) return ;
    }
    for(int i = 1; i <=m ;i++){
        nowNum[i] += a[index];
        dfs(index + 1);
        nowNum[i] -= a[index];
    }
}
int main(){
    cin >> n >> m;
    
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        ans += a[i];
    }
    
    if(ans % m != 0) 
        flag = 0;
    ans /= m;
    dfs(1);
    if(!flag)
        printf("False\n");
    else 
        printf("True\n");
    return 0;
}
表达式求职
有括号是真的烦,而且不知道他数据是怎样的,一只过75% ,改成long long 也是 ,这题也没注意啥规范编程,
自己模拟俩栈,总是就是写的很难受,而且咱也不知道他除0会怎么样,题目好像也没说


#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, m;
const int maxx = 1e5 + 7;
char a[maxx], b[maxx], c[maxx];
ll d[maxx];
stack<char>mid;
stack<char>ope;

int flag = 0;
ll getNum(ll a,ll b,char c){
    if(c=='+') return a+b;
    if(c=='-') return a-b;
    if(c=='*') return a*b;
    if(c=='/') {
        if(b == 0 ) {
            return 0;
            flag = 1;
        }
        
        
        return a/b;
        
    }
    return 0;
}
void solve(){
    int l=0,k=0,flag=0;
    for(int i = 0; a[i]; i++){
        if(a[i] >= '0' && a[i] <= '9'){
            b[k++] = a[i];
            if(a[i + 1] <'0' || a[i + 1] > '9'){
                b[k++] = '#';
            }
        }
        else if(a[i] == ')'){
            while(c[--l] != '('){
                b[k++] = c[l];
            }
        }
        else {
            if(l > 0){
                if(a[i] == '+' || a[i] == '-'){
                    while(c[l - 1] != '('  && l > 0   )
                        b[k++] = c[--l];
                }
                else {
                    if(c[i - 1] == '*' || c[i - 1] == '/'){
                        b[k++] = c[--l];
                    }
                }
            }
            c[l++] = a[i];
        }
    }
    while( l > 0){
        b[k++] = c[--l];
    }
    b[k] = '\0';
}

int f(){
    ll numc = 0,l = 0;
    for(int i=0;b[i];i++){
        if(b[i] >= '0' && b[i] <= '9'){
            numc = numc * 10 +(b[i]-'0');
        }
        else if(b[i]=='#'){
            d[l++] = numc;
            numc=0;
        }
        else {
            d[l-2] = getNum(d[l-2], d[l-1], b[i]);
            l--;
        }
    }
    return d[0];
}
int main(){
    
    cin >> a;
    if(a[0] == '-'){
        n = strlen(a);
        //a[n+1]='/0';
        for(int i = n;i>= 1;i--)
            a[i] = a[i-1];
        a[0]='0';
    }
    //cout<<a<<endl;
    solve();
    ll p =f();
    if(flag) {
        printf("0\n");
    }
    else 
    printf("%lld\n",p);
           
    return 0;
}
// 求a*b = c*d  11 <= a,b,c <=99 , 111 <= d <= 999
1 - 9出现一次,输出所有解  ,记录每个树出现的次数,直接暴力就完事了a^3 * 10
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, m;
const int maxx = 1e5 + 7;

#define rep(i, j, n) for(ll i = j; i<= n; i++)
ll vis[16];
void change(ll x){
    while(x){
        vis[x % 10]++;
        x /= 10;
    }
}
int main(){
    rep(i, 11, 99)
        rep(j, i, 99)
            rep(k, 11, 99){
        ll num = i * j;
        memset(vis, 0, sizeof(vis));
        
        if(num % k == 0){
            ll p = num / k;
            change(i) ; change(j) ; change(k) ; change(p);
            
            if(p >= 111){
                int flag = 0;
                if(vis[0] >= 1) flag = 1;
                rep(x,1,9){
                    if(vis[x] >= 2) flag = 1;
                    //printf("%lld ",vis[x]);
                }    
                if(!flag){
                    printf("%lld x %lld = %lld x %lld\n",i,j,k,p);
                }
            }
        }
    }
    return 0;
}

求矩阵1,2,3,到k的幂次和,我一看这不直接矩阵快速蜜吗,我一看是求和,而且 n = 10,k = 1e6 算下来复杂度到1e9了,可能又啥优化的?
算了先写了个暴力,然后就过了***网易就喜欢玩这个哈


#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, m;
const int maxx = 1e5 + 7;

#define rep(i, j, n) for(ll i = j; i<= n; i++)
ll a[16][16];
ll ans[16][16];
ll b[11][11];
ll c[11][11];
ll k;
int main(){
    cin >> n >> k >> m;
    rep(i, 1, n)
        rep(j, 1, n){
        cin >> a[i][j];
        a[i][j] %= m;
        ans[i][j] = a[i][j] % m;
        b[i][j] = a[i][j] % m;
    }
    rep(x, 1, k-1){
        memset(c,0,sizeof(c));
        rep(i, 1, n){
            rep(j, 1, n){
                rep(k, 1, n){
                    c[i][j] += a[i][k] * b[k][j];
                }
            }
        }   
        rep(i, 1, n)
            rep(j, 1, n) {
            b[i][j] = c[i][j] % m;
            ans[i][j] = (ans[i][j] + b[i][j]) % m;
        }
        
    }
    rep(i, 1, n){
        rep(j, 1, n){
            printf("%lld ",ans[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}


#网易笔试##网易##笔经#
全部评论
表达题没来得及做😥
点赞 回复
分享
发布于 2022-03-19 12:04
第一题通过96% 怎么回事
点赞 回复
分享
发布于 2022-03-19 12:04
滴滴
校招火热招聘中
官网直投
666
点赞 回复
分享
发布于 2022-03-19 12:12
好强
点赞 回复
分享
发布于 2022-03-19 12:21
第一道通过96,第三道循环炸了😂😂裂开了
点赞 回复
分享
发布于 2022-03-19 13:06
我想问一下第一题是怎么避免重复选取糖果的,就是不同人不能选取同一颗糖果
点赞 回复
分享
发布于 2022-03-19 13:10
笔试不是27号第一场吗
点赞 回复
分享
发布于 2022-03-19 14:22
试了半天这样搞定了,不知道还炸不炸
点赞 回复
分享
发布于 2022-03-19 14:57
默默问一句 有人笔试出结果 约面试了嘛
点赞 回复
分享
发布于 2022-03-24 15:07

相关推荐

10 28 评论
分享
牛客网
牛客企业服务