我思故我在——数据结构题目(题目整理者july,非常感谢)

本文介绍了一段C++代码,用于创建一个名为NumberTB的类,该类处理两个数组(top和bottom),计算top数组元素在bottom数组中的出现频率,并确保所有元素一一对应。当所有元素匹配时,成功标志设为true并返回bottom数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      

   当我们不用自己的头脑,就会放弃对命运的把握,而把它交给别人。我们必须把握生活,才不至浪费生活。

                                                                                                    ——摘自奥格.曼狄诺《羊皮卷》

第6 题

腾讯面试题:
给你10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
举一个例子,
数值: 0,1,2,3,4,5,6,7,8,9
分配: 6,2,1,0,0,0,1,0,0,0
0 在下排出现了6 次,1 在下排出现了2 次,

2 在下排出现了1 次,3 在下排出现了0 次....

*************************************************************************************************

    1.  巧用C++类的构造函数,将两个数组赋初值;

         并且,类的成员数据可以由函数随时访问,避免了普通变量的局限性;

       ( good job!!)

    2.  依次计算数组1元素在数组2中出现的次数(frequence=getfrequence(top[i])),

        只要有一个bottom[i]!=frequence,则success=false,

    3.  success=false,则必须重新开始新一轮的top与bottom比较,

          直到top.与bottom全部元素一一对应;

*************************************************************************************************

#include <iostream>
using namespace std;
#define LEN 10

class NumberTB
{
private:
  int top[LEN];
  int bottom[LEN];
  bool success;

public:
  NumberTB();
  int* getBottom();
  void setNextBottom();
  int getFrequecy(int num);
};

NumberTB::NumberTB() /*上,下排初始化*/
 {
  success = false;
  for(int i=0;i<LEN;i++)
    {
       top[i] = i;
       bottom[i]=0;
     }
 }

int* NumberTB::getBottom()

/*只有连续的两次getnextbottom所有元素都不变才最终结束,若有一个bottom数组元素改变,则继续*/
{

  while(!success)
     {
   setNextBottom();
      }
  return bottom;
}


void NumberTB::setNextBottom()
{
  bool reB = true;
  for(int i=0;i<LEN;i++)
    {
   int frequecy = getFrequecy(top[i]);
                                        /*若是不等说明还不是最终结果,success=false;*/
   if(bottom[i] != frequecy)
            {
      bottom[i] = frequecy;
      reB = false;
            }
      }
  success = reB;
}

                           /*此处的num 即指要查找上排的数i(0~9)在数组bottom中出现次数*/
int NumberTB::getFrequecy(int num)
{
   int count = 0; /*count作为计数器*/
   for(int i=0;i<LEN;i++)
       {
    if(bottom[i] == num)
          {
      count++;
          }
        }
   return count;
}

int main()
{
   NumberTB nTB;
   int* result= nTB.getBottom();
   for(int i=0;i<LEN;i++,result++)
         {
     cout<<*result<<endl;
          }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值