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

3个回答


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;
}

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问