2013-06-19 12 views
0

我嘗試創建一個字母系列一樣的 a,b,c,...z,aa,ab,ac,ad,ae,af,...,az,ba,bb,bc,...,bz,..zz,aaa,aab,aac..高達給出number(N)如何創建字母就像在Excel coloumns

,但是當我嘗試創建使用for loops它,我已經在元素創建一個for loop每第二個字符 這意味着打印A..Z - LOOP1,一個aa每一第二封信,我寫了一個新的for循環

是有可能創建一個for循環這種類型的系列...

在此先感謝...

回答

1

這裏是如何做到這一點:

public static string GetExcelColumnName(int index) 
    { 
     int d = index; 
     string name = ""; 
     int mod; 

     while (d > 0) 
     { 
      mod = (d - 1) % 26; 
      name = Convert.ToChar('a' + mod).ToString() + name; 
      d = (int)((d - mod)/26); 
     } 

     return name; 
    } 

    public static IEnumerable<string> GetExcelColumns(int n) { 
     for (int i = 1; i <= n; i++) 
     { 
      yield return GetExcelColumnName(i); 
     } 
    } 

    static void Main(string[] args) 
    { 
     int i = 1; 
     foreach (var item in GetExcelColumns(900)) 
     { 
      Console.Write(i++ + ": " + item + " "); 
     } 
     Console.WriteLine(); 
    } 

說明的GetExcelColumnName

//Suppose index = 1, `GetExcelColumnName` should return `"a"`. 
    d = 1 
    d > 0 
     mod = (d - 1) % 26; //mod now is 0 
     Convert.ToChar('a' + mod); // => That's 'a' 
     //name now is "a" 
     d = (d - mod)/26 = (1 - 0)/26 = 0 // d is now 0 
    //End of While 
    method returns "a" 

//Suppose index = 28, `GetExcelColumnName` should return `"ab"`. 
    d = 28 
    d > 0 
     mod = (d - 1) % 26; //mod now is 1 (27 modulo 26) 
     Convert.ToChar('a' + mod); // => That's 'b' 
     //name now is "b" 
     d = (d - mod)/26 = (28 - 1)/26 = 1 // d is now 1 
    d > 0 
     mod = (d - 1) % 26; //mod now is 0 (0 modulo 26) 
     Convert.ToChar('a' + mod); // => That's 'a' 
     //name now is "ab" 
     d = (d - mod)/26 = (1 - 0)/26 = 0 // d is now 0 
    //End of While 
    method returns "ab" 
+0

即時無法**瞭解**這,**對不起**,您可以添加評論或給出另一種解決方案.... – Anjan

+0

你不明白,究竟是什麼? –

+0

我無法理解這一點,'公共靜態字符串GetExcelColumnName(INT索引) { int d = index; string name =「」; int mod; (d> 0) 而(d> 0) { mod =(d-1)%26; name = Convert.ToChar('a'+ mod).ToString()+ name; d =(int)((d-mod)/ 26); } return name; }' – Anjan

0

這是非常簡單的列表和內涵

例如在python

alpha = ['a','b','c','d','e','f','g','h','i'] 

def merge(x,y): 
    new = [ a+b for a in x for b in y] 
    return new 

print(merge(alpha,alpha)) 
print(merge(alpha,merge(alpha,alpha))) 

會給你想要的東西。在C#中,你可以找到一個等效的(或在F#中)

+0

我不知道如何將它轉換成C#中,你可以幫我做到這一點... – Anjan

0

我認爲正確的方法來看看這個,是基數爲27的數字,並跳過所有的數字與0您的數字是_abcdefghijklmnopqrstuvwxyz(_具有值0 ,z的值爲26),然後您創建如下所示的基準27數字:

nums_generated = 0 
next_num = 1 
while nums_generated < N: 
    number_string = generate_base_27(next_num) 
    if not '_' in number_string: 
     print number_string 
     num_generated = num_generated + 1 
    next_num = next_num + 1 

這應該有所斬斷。對於一個給定的字符集創建基27號,期待例如here,並作出適當的修正,因爲你需要臺27

+0

請給在C#如果可能的話 – Anjan

+0

氏解決方案s是僞代碼,這也恰好是合法的Python。將其轉換爲C#應該非常簡單。如果您對轉換有具體問題,請告訴我。 – zmbq