這是一道某公司的上機面試題:
microsoft excel 中欄目是用 a,b,c...z;aa,ab,...zz ... zzzz ....這樣表示序列的它對應是這樣
0,1,2,...25;26,27...701 ...475253
請寫出這個對應關係。
輸入是多行輸入,輸出是輸出=原串+空格+值
例子:a 0
aa 26
aaa 702
aaaa 18278
因為看到了a-z我就以為是26進製,然後推出 (第一位) (第二位) (第三位) 這樣表示的excel 列名為
value = 第一位*26^2+第二位*26*1+第三位
a=0 b=1 ... z=25
然後一看 aa = 26 這是什麼東東? 00 這個是沒有的。
思路不對
如果個位的a=0 b=1...z=25
非個位的 a=1 b=2 ... z=26 是否對呢?
驗證一下
aa= 1 * 26+0=26
aaa = 1*26*26+1*26+0 = 702
aaaa = 1*26*26*26+1*26*26+1*26+0 = 18278
果然正確
那麼這個時候就急急忙忙程式設計了。(時間不多了)
#include #include #include #include #include #include using namespace std;
#define out
//// getexcelcolumnnumber: 獲得excel 的列標題
// alphanum - a-z aa-zz aaa-zzz ...
// 返回列標題的代表的序號
int getexcelcolumnnumber(string &alphanum)
tmp.clear();
putchar('\n');
}else
}else
else}}
}void main()
{ vectorinvec;
input(invec);
//string alphanum = "aa";
//cin >> alphanum;
for(int i=0;i
這個是感覺,還有就是進行了一下推理。至於原理當時沒有想那麼多。
a-z 有 26 個數
aa-zz 有 26*26個數
aaa-zzz 有26*26*26 個數
如果我們這個數是4位 (first)(second)(third)(fourth)
因為是四位數所以前面就是:
26*26*26+26*26+26
要計算的這個四位數就是:
(first-'a')*26*26*26+(second-'a')*26*26+(third-'a')*26+(fourth-'a')+26*26*26+26*26+26
=(first-'a'+1)*26*26*26+(second-'a'+1)*26*26+(third-'a'+1)*26+(fourth-'a')
這就是我把個位的數 a = 0 其他位置上的a = 1 的原因。
(如果first=a 則 first-'a'+1=1 second 等同理)
一道面試題
一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...
一道面試題
前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...
一道面試題
如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對於乙個給定的n,怎樣才能用最少的步驟將它變到1。例如 n 61 n 60 n 2 30 n 2 15 n 16 n 2 8 n 2 4 n 2 2 n 2 1 public class myclass public static vo...