欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2016年华为研发工程师机试题解

程序员文章站 2022-04-04 20:13:31
...

目录

1.删数

2. 字符集合

3.数独


1.删数

一开始用数组模拟,因为循环问题很不好处理,挂掉了

就很迷

2016年华为研发工程师机试题解

#include <iostream>
#include <set>
#include <vector>
using namespace std;
const int flag = 1024;

int main(){
    int n;
    int a[1001];
    while(cin>>n){
        if(n<=1000){
            for(int i=0;i<n;i++){
                a[i] = i;
            }
            int ans,num = 0;
            int j = 0;
            while(num<n-1){
                for(int i=0;i<2;i++){
                    //前进两次
                    while(true){
                        if(j==n-1&&a[n-1]==flag){//归位为零
                            j = 0;
                        }else if(j==n-1&&a[n-1]!=flag){
                            j = 0;
                            break;
                        }
                        j++;
                        if(a[j]!=flag)
                            break;
                    }
                }
                j++;
                a[j] = flag;
                num++;
            }
            ans = j+1;
            cout<<ans<<endl;
        }else{
           // cout<<999<<endl;
        }
    }
    
    return 0;
}

可惜LeetCode队列没有刷,这是明显队列问题啊

我太菜了哭

用队列模拟,队首取数,用一个计数器计数,隔2个删一个,其他的重新放到队尾 

#include<iostream>
#include<queue>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        queue<int> q;
        for(int i=0;i<n;i++)
        {
            q.push(i);
        }
        int count=0;
        while(q.size()!=1)
        {
            if(count!=2)
            {
                int b=q.front();
                q.pop();
                q.push(b);
                count++;
            }
            else
            {
                q.pop();
                count=0;
            }
        }
        int c=q.front();
        cout<<c<<endl;
    }
    return 0;
}

2. 字符集合

最后一题难哭了,这题简单哭了

2016年华为研发工程师机试题解

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main(){
    string s;
    while(cin>>s){
        string ss;
        map<char,bool> m;    
        for(int i=0;i<s.size();i++){
            if(m.find(s[i])==m.end()){
                ss.push_back(s[i]);
                m[s[i]]=true;
            }
        }
        cout<<ss<<endl;
        ss.clear();
        s.clear();
    }
    return 0;
}

3.数独

这题是真的佛,我在这之前根本不知道数独是什么

看到题很懵,更别说有什么思路了……

2016年华为研发工程师机试题解

相关标签: 华为机试