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 Input | Sample 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();
}