雷火笔试4.1 - 第四题

第四题我估摸着捣鼓了得一个半小时,害,本地调试我注视掉了cin,最后提交的时候忘了弄回来,结果0%case,气/-_-/
题目不难,就是逻辑太长,跟阅读理解似的。。。

#include <iostream>
#include <vector>
using namespace std;
class buttary{
    public:
        char m_type = 'X';// 1 2 3 4 5 
        int kick_count;
        bool ele;
        buttary *from = nullptr;
        buttary *next1 = nullptr,*next2 = nullptr,*next3 = nullptr,*next4 = nullptr;
        int m_index;

        bool turn = false;
        void init(char type,int index){
            m_type = type;
            kick_count = 0;
            ele = false;
            m_index = index;
            // cout<<"add:"<<m_type<<m_index<<endl;
        }
        void add_from(buttary *i_from){
            from=i_from;
        }
        void add_next(buttary *next){
            // cout<<"add next"<<next->m_index<<endl;
            if(next1==nullptr){
                next1=next;
                return;
                }
            if(next2==nullptr){
                next2=next;
                return;
                }
            if(next3==nullptr){
                next3=next;
                return;
                }
            if(next4==nullptr){
                next4=next;
                return;
                }
        }
        void kick(){
            // cout<<m_type<<" "<<m_index<<endl;
            if(m_type=='D'){
                if(ele==false && from->ele==true){
                    kick_count++;
                }
                ele = from->ele;
            }else if(m_type=='C'){
                if(turn){
                    ele = from->ele;
                }else{
                    ele = false;
                }
            }else if(m_type=='B'){
                // bool turn_to = turn;
                if(ele==false&&from->ele){
                    turn=!turn;
                // cout<<from->ele<<ele<<" "<<turn<<endl;
                }
                // if(turn==false&&turn_to==true)
                //     ele=false;
                // else
                //     ele=from->ele;
                // turn = turn_to;
                if(turn){
                    ele=from->ele;
                }else{
                    ele=false;
                }
            }
            else{
                ele = from->ele;
            }
        }
        void turn_it(){
            if(m_type!='C')return;
            turn = !turn;
        }
};
vector<buttary> button(256+1);
//递归实现
void kick_once(int index){
    button[index].kick();
    // cout<<"m_kick"<<index<<endl;
    // cout<<"next:"<<button[index].next1->m_index;
    if(button[index].m_type=='X'||button[index].next1==nullptr/*||button[index].next1->m_type=='X'*/)return;
    if(button[index].next1!=nullptr)
    kick_once(button[index].next1->m_index);
    if(button[index].next2!=nullptr)
    kick_once(button[index].next2->m_index);
    if(button[index].next3!=nullptr)
    kick_once(button[index].next3->m_index);
    if(button[index].next4!=nullptr)
    kick_once(button[index].next4->m_index);
}
int main(){
    int N = 0;
    cin>>N;
    for(int i=0;i<N;i++){
        buttary b_temp;
        char type;
        cin>>type;
        b_temp.init(type,i+1);
        button[i+1] = b_temp;
    }
    int M = 5;
    cin>>M;
    for(int i=0;i<M;i++){
        int from,to;
        cin>>from>>to;
        button[from].add_next(&button[to]);
        button[to].add_from(&button[from]);
    }
    //初始化,第一次通电
    button[0].ele=true;
    button[1].add_from(&button[0]);
    kick_once(1);

    int click = 5;
    cin>>click;
    for(int i=0;i<click;i++){
        int click_idnex = 0;
        cin>>click_idnex;
        if(button[click_idnex].m_type=='C'){
            button[click_idnex].turn_it();
            kick_once(click_idnex);
        }
    }
    for(int i=0;i<N;i++){
        if(button[i+1].m_type=='D')
            cout<<button[i+1].kick_count<<" ";
    }
    return 0;
}
各种中间件做成一个电源类,然后每次点击之后,递归往后查找,改变电路状态,然后注意脉冲信号和B类型的判断处理就没问题~
运行结果:

#笔试题目##网易雷火#
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 1 评论
分享
牛客网
牛客企业服务