【练习】10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数
/* 腾讯面试题: 给你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 次.... 以此类推.. 此程序采用穷举法 */ #include <iostream> using namespace std; #define len 100 class TBNumber { public: TBNumber() { for (int i=0;i<len;i++) { top[i]=i; bottom[i]=0; } success=false; } void setBottom(); void adjustBottom(); int getFrequency (int i); private: int top[len]; int bottom[len]; bool success; }; void TBNumber::setBottom() { while(!success) { adjustBottom(); } // for (int i=0;i<len;i++) // { // cout<<top[i]<<"\t"; // } cout<<endl; for (int i=0;i<len;i++) { cout<<bottom[i]<<"\t"; } } void TBNumber::adjustBottom() { bool ret=true;//标志,判断bottom中所有下标是否已经符合条件 for (int i=0;i<len;i++) { if (bottom[i]!=getFrequency(top[i])) { ret=false; bottom[i]=getFrequency(i); } } success=ret; } int TBNumber::getFrequency(int i) { int frequency=0; for (int j=0;j<len;j++)//获取bottom中i出现的频率 { if (bottom[j]==i) { frequency++; } } return frequency; } int main() { TBNumber tbNumber; tbNumber.setBottom(); }