Andy is Great !!!!! 2019-09-04 16:21 采纳率: 50%
浏览 343
已采纳

请问该算法如何实现?

  1. 一个数组里面有164个元素,其中每6个元素分为一组,则总共可以分为27组单2个。即可以看作共有28组。在任意一组里设置任意一个元素为当前元素,再设置该当前元素前面所有的元素都显示,当前元素后面只能8个元素可显示,其余元素全都隐藏。请问该算法如何实现?请用程序或面向对象编程实现。 假设我们设置第3组的第3个元素为当前元素,则用程序或面向对象编程如何实现?
  • 写回答

3条回答 默认 最新

  • 昆仑道长 2019-09-05 13:17
    关注
    
    template<typename T>
    class CArr
    {
     public:
        CArr(std::vector<T> arr,int nInGroup=6);
        ~CArr();
        bool SetCurrentPos(int iGroup,int iElement); //第iGroup组元素,第iElement个元素
        std::vector<T> GetVisibleElements();
    private:
        std::vector<T> m_arr;
        int m_elementCount; //总共有多少个元素
        int m_nInGroup; //每组多少个元素
        int m_iGroup; //第iGroup组元素
        int m_iElement; //第iElement个元素
    };
    
    template<typename T>
    CArr::CArr(std::vector<T> arr,int nInGroup = 6):m_arr(arr)
                    ,m_elementCount(arr.size())
                    ,m_nInGroup(nInGroup)
                    ,m_iGroup(0)
                    ,m_iElement(0)
    {
    
    }
    
    template<typename T>
    CArr::~CArr()
    {
    }
    
    template<typename T>
    //设置第几组,第几个元素
    bool CArr::SetCurrentPos(int iGroup,int iElement)
    {
        if(iElement >= m_nInGroup){
            return false;
        }
        int totalGroup = m_elementCount/m_nInGroup+(m_elementCount%m_nInGroup==0?0:1);
        if(iGroup >= totalGroup
        {
            return false;
        }
    
        m_iGroup = iGroup;
        m_iElement = iElement;
        return true;
    }
    
    //获取可见元素集合
    template<typename T>
    std::vector<T> CArr::GetVisibleElements()
    {
        int _max_ = (m_iGroup+1)*m_nInGroup+iElement+8>m_elementCount
                        ?m_elementCount:(m_iGroup+1)*m_nInGroup+iElement+8;
        std::vector<T> visible;                 
        for(int i=0; i<_max_; i++)
        {
            visible.push_back(m_arr[i]);
        }
        return visible;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 MddBootstrapInitialize2失败
  • ¥15 LCD Flicker
  • ¥15 Spring MVC项目,访问不到相应的控制器方法
  • ¥15 esp32在micropython环境下使用ssl/tls连接mqtt服务器出现以下报错Connected on 192.168.154.223发生意外错误: 5无法连接到 MQTT 代理,如何解决?
  • ¥15 关于#genesiscsheel#的问题,如何解决?
  • ¥15 Android aidl for hal
  • ¥15 STM32CubeIDE下载程序报错
  • ¥15 微信好友如何转变为会员系统?(相关搜索:小程序)
  • ¥15 c# 直接使用c++ 类库文件
  • ¥15 一个主机电脑有两个显示器,当前有两个软件主体是网页html打包的exe程序,如何通过cmd命令bat同时打开软件一个在主屏幕显示,另外一个软件在2副屏幕上显示