2018年4月13日 星期五

Lucky貓 一顆星_3

Lucky貓 - Q11541: Decoding

編碼是把一段訊息由一種格式轉換成另一種格式,目前存在許多種編碼方式,本題要處理的是一種稱為"紀錄重複次數編碼"(Run-Length Encoding)的簡易編碼方式。

"紀錄重複次數編碼"是一種簡單易懂的資料壓縮方式,它把連續出現的字元以該字元及其重複次數來取代,例如AAA表示A連續出現3次,故以A3來取代 AAA。另一個例子是"AABBBBDAA"換成"A2B4D1A2"。

本題要求把編碼後的字串轉回原來的字串(即進行解碼)。
Input
輸入的第一列為整數 T ( T < 50 ),表示測試資料的組數,每組測試資料有一列字串,表示被編碼後的字串,該字串只會出現數字[0-9],及大寫字母[A-Z]。所有的字串必定是正確的編 碼字串。
Output
請輸出每組測試資料的編號及解碼後的字串, 格式如下。
編碼後的字串長度不會超過200個字元。


Sample Input                              Output for Sample Input

3
A2B4D1A2
A12
A1B1C1D1
Case 1: AABBBBDAA
Case 2: AAAAAAAAAAAA
Case 3: ABCD


            int N = int.Parse(Console.ReadLine());
            for (int i = 0; i < N; i++)
            {
                string input = Console.ReadLine() + "G", rememberS = null, rememberI = null, Collect = null;
                foreach (char item in input.ToCharArray())
                {
                    if (Convert.ToInt32(item) >= 65 && Convert.ToInt32(item) <= 90)
                    {
                        if (rememberI != null && rememberS != null)
                        {
                            for (int k = 0; k < int.Parse(rememberI); k++)
                                Collect = Collect + rememberS;
                            rememberS = rememberI = null;
                        }
                        rememberS = rememberS + item.ToString();
                    }
                    else rememberI = rememberI + item.ToString();
                }
                Console.WriteLine(Collect);
            }

Lucky貓 - Q11689: Soda Surpler

Tim 是一個非常愛喝汽水的人。由於他沒有錢,所以他要喝汽水的唯一方法就是收集空汽水瓶子,然後拿去回收換取錢再去買新汽水來喝。除了他自己喝完的空瓶子,Tim也會到街上去收集別人喝完的空瓶子。有一天,他非常的渴,他要盡可能的喝汽水,直到他得不到任何一瓶為止。
Input
輸入的第1列有一個整數N,代表以下有多少組測試資料。
每組測試資料1列,含有 3 個整數  e,f,c 。e(0 <=  e < 1000)代表Tim一開始擁有的空瓶子數目,f(0 <=  f < 1000)代表Tim在這一天他在街上收集到的空瓶子數目,c(1 <  c < 2000)代表多少個空瓶子可以換一瓶新的汽水。
請參考Sample Input。
Output
對每一組測試資料輸出一列,代表 Tim 可以喝到多少瓶汽水。
Sample InputSample Output
2
9 0 3
5 5 2
4
9



            int N = int.Parse(Console.ReadLine());
            for (int i = 0; i < N; i++)
            {
                int e = int.Parse(Console.ReadLine());
                int f = int.Parse(Console.ReadLine());
                int c = int.Parse(Console.ReadLine());
                int cola = 0;
                e = e + f;
                while (e >= c)
                {
                    f = e % c;
                    e = e / c;
                    cola = cola + e;
                    e = e + f;
                }
                Console.WriteLine("{0}\n\n",cola);
            }

N 個元素集合中所有的子集合共有 2N 
例如:N = 3 集合的元素假設為 {0, 1, 2}
所有的子集合包括空集合應該有下列 23=8 個:
{}
{0}
{1}
{2}
{0, 1}
{0, 2}
{1, 2}
{0, 1, 2}

        static void Main(string[] args)
        {
            int N = 0, start = 0, M;
            string[] s = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
            List<string> OriData = new List<string>(s);//Original
            List<string> CalData = new List<string>();//Calculate
            List<string> ColData = new List<string>(s);//Collect
            while (N < s.Length)
            {               
                int distance = ColData.Count - start;
                CalData = ColData.GetRange(start, distance);
                start = ColData.Count;
                for (int i = 0; i < CalData.Count; i++)
                {
                    char[] c = CalData[i].ToCharArray();
                    M = OriData.IndexOf(c[c.Length - 1].ToString());
                    for (int j = M + 1; j < OriData.Count; j++)
                        ColData.Add(CalData[i] + OriData[j]);
                }
                N++;
                ColData.TrimExcess();
                CalData.TrimExcess();
            }
            foreach (string item in ColData) Console.Write(item + " ");
            Console.WriteLine();
            Console.WriteLine("ColData : " + ColData.Capacity);
            Console.ReadLine();
        }




沒有留言:

張貼留言

WinFormTb02

https://drive.google.com/drive/u/0/folders/1UwS9FZ3ELCOK6SAwirHrkxq3z_RSbxJt https://www.youtube.com/watch?v=k7IkIeww_U0&list=PLumjEWemD...