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;
    }
    
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 吃鸡王者 2019-09-04 16:59

    你只需要输出数组的前 min(6*g-1+e+8,164)个元素就可以了,其中g,e分别是要设置的第几组和第几个元素,min()表示求两个值中的最小值。
    集体代码不管你用什么语言都是很好实现的。

    评论
    解决 无用
    打赏 举报
  • threenewbee 2019-09-05 00:21

    这个不需要什么算法,只需要对你的当前元素的下标除以6得到组序号,并且除以6取模(除以6后的余数)得到组里的相对序号,再判断下。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题