騰訊面試題:根據上排給出的十個數,在其下排填出對應的十個數。
版權所有。所有權利保留。
歡迎轉載,轉載時請註明出處:
http://blog.csdn.net/xiaofei_it/article/details/17172769
根據上排給出的十個數,在其下排填出對應的十個數,要求下排每個數都是先前上排那十個數在下排出現的次數。
上排的十個數如下:
0,1,2,3,4,5,6,7,8,9
答案是:
6,2,1,0,0,0,1,0,0,0
我在這裡使用DFS,並且使用兩個函式互相遞迴。
程式碼如下:
#include <iostream>
#define MAX 10
using namespace std;
int a[MAX],su;
void output()
{
for (int i=0;i<MAX;i++)
cout<<a[i]<<' ';
cout<<endl;
}
void alloc(int,int,int);
void go(int n)//嘗試第n位
{
if (n==MAX)
{
output();
return;
}
int have=0;
for (int i=0;i<MAX;i++)
if (a[i]==n) have++;
int empty=0;
for (int i=n;i<MAX;i++)
if (a[i]==-1) empty++;
int pos;
for (pos=n+1;pos<MAX;pos++)
if (a[pos]==-1) break;
if (a[n]!=-1)
{
if (empty<a[n]-have||a[n]<have)
return;
alloc(n,a[n]-have,pos);
}
else
{
for (a[n]=n>have?n:have;a[n]<=have+empty;a[n]++)
{
if (a[n]!=n)
alloc(n,a[n]-have,pos);
else if (a[n]-1-have>=0)
alloc(n,a[n]-1-have,pos);
}
a[n]=-1;
}
}
void alloc(int n,int quantity,int pos)//在pos位之後分配quantity個n
{
if (quantity==0)
{
go(n+1);
return;
}
int empty=0;
for (int i=pos+1;i<MAX;i++)
if (a[i]==-1) empty++;
int p;
for (p=pos+1;p<MAX;p++)
if (a[p]==-1) break;
if (pos>=MAX) return;
a[pos]=n;
alloc(n,quantity-1,p);
a[pos]=-1;
if (empty>=quantity)
alloc(n,quantity,p);
}
int main()
{
for (int i=0;i<MAX;i++) a[i]=-1;
go(0);
return 0;
}
相關文章
- 演算法題24 根據上排給出十個數,在其下排填出對應的十個數演算法
- [golang]-根據json中的某個key的值輸出對應的idGolangJSON
- 對十進位制數字的按位輸出,取反,並求其位數
- 給Android應用開發者的十個建議Android
- 面試Python機器學習時,常見的十個面試題Python機器學習面試題
- C語言輸入一個數輸出對應的值C語言
- 給出分數陣列,得到對應的名次陣列陣列
- 根據給定的字串,修改一個多層巢狀物件對應的屬性值字串巢狀物件
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 面試數十人有感面試
- 【程式設計師面試金典】 寫出一個程式,接受一個十六進位制的數值字串,輸出該數值的十進位制字串。(多組同時輸入 )程式設計師面試字串
- 細數開源歷史上的十個重大事
- 給自己出的iOS面試題iOS面試題
- 【谷歌面試題】給出一個陣列A,找出一對 (i, j)使得A[i]谷歌面試題陣列
- 面試小冊:面試官經常問的十個棘手的 JavaScript 問題面試JavaScript
- 根據一個筆試題引出的思考筆試
- 根據業務摸索出的一個selenium程式碼模版(python)Python
- 給應用程式加個彈出對話方塊
- 統計陣列個元素出現的個數陣列
- 軟體最傑出的十個成功(4,5) (轉)
- 軟體最傑出的十個成功(9,10) (轉)
- 給機器學習面試者的十項建議機器學習面試
- 細數2011年對開發者而言的十個重大事件事件
- 別人家的面試題:統計“1”的個數面試題
- django | 根據 model 建立對應的表Django
- 面試題-JavaScript交換兩個變數的方法面試題JavaScript變數
- 給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。符號
- C 如何將輸出的地址轉化為十進位制數
- 建站效率提升數十倍——騰訊雲 Web Cloud Function 建站雲函式正式釋出WebCloudFunction函式
- 十個最常見的Java字串問題Java字串
- 細數開源歷史上的十個重大事件事件
- 好程式設計師Java分享Javamain十個面試題程式設計師JavaAI面試題
- 十道海量資料處理面試題與十個方法大總結(轉)面試題
- 整數反轉:給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。符號
- 在其它數都出現k次的陣列中找到只出現一次的數陣列
- 菲波那契數——根據輸入資料中的n,輸出第n項菲波那契數
- MySQL如何髮型不亂的應對半年數十TB資料增量MySql
- 深度學習之輸入通道個數、卷積核通道個數,卷積核個數、輸出通道個數的關係深度學習卷積