2018年2月15日 星期四

CPE一顆星

內容:
美國國家資源局使用衛星影像技術來調查森林中的樹種,你的任務就是根據輸入的樹木名稱,計算各樹種所佔的百分比。
題目概要:
1. 輸入的第一個數字為接下來多少case需要被處理。每個csae都有空白隔開。
2. 計算每個case裡的物種名稱的個數(應該是物種名稱拉,因為我沒仔細看題目,哈哈)占多少百分比。 Ps每一行代表一個物種。
3. 輸出時需要依物種名稱做排序,依序印出。 
範例輸入
2

Red Alder
Ash
Ash
Aspen

Ash
Ash
Ash
Red Alder
Red Alder
範例輸出

Ash 50.0000
Aspen 25.0000
Red Alder 25.0000

Ash 60.0000
Red Alder 40.0000


static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine()), h = 1;
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine();
                string input = null;
                List<string> remember = new List<string>();
                while (true)
                {
                    input = Console.ReadLine();
                    if (input == "") break;
                    remember.Add(input);           
                }
                remember.Sort();
                remember.Add("end");
                for (int j = 0; j < remember.Count-1; j++)
                {
                    if (remember[j] == remember[j + 1]) h++;
                    else
                    {
                        Console.WriteLine("{0}: {1}", remember[j], h);
                        h = 1;
                    }
                }               
            }
        }


難度
☆☆☆☆

問題
給你一副照順序放好的紙牌,其中卡片的編號從1~n,且1號排在最上面,n號牌在最底下。
只要這副牌還有兩張以上,你就必須照以下的規則操作:
丟掉最上面的那張牌,然後把目前最上面的那張牌放到牌堆的最下面。

你的工作是找出每張牌被丟掉的順序,以及最後剩下的那張牌。

Input & Output
輸入的每一列包含一個整數 n≤50,當輸入為0時代表輸入結束,你不應該處理這個輸入。
對每個輸入的數字產生兩列輸出,第一列是每張牌被丟掉的順序,第二列則是剩下的那張牌。
任何一列都不應該有任何前置或尾隨的多餘空白,輸出細節請參考sample output 

Sample Input
7
19
10
6
0

Sample Output
Discarded cards: 1, 3, 5, 7, 4, 2
Remaining card: 6
Discarded cards: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 4, 8, 12, 16, 2, 10, 18, 14
Remaining card: 6
Discarded cards: 1, 3, 5, 7, 9, 2, 6, 10, 8
Remaining card: 4
Discarded cards: 1, 3, 5, 2, 6
Remaining card: 4
static void Main(string[] args)
        {
            while (true)
            {
                int n = Convert.ToInt32(Console.ReadLine()), h =0;
                Console.WriteLine();
                if (n == 0) return;
                List<int> remember = new List<int>();
                List<int> anwser = new List<int>();
                for (int i = 1; i <= n; i++) remember.Add(i);
                while (remember.Count != 1)
                {
                    anwser.Add(remember[0]);
                    remember.Add(remember[1]);
                    remember.RemoveRange(0, 2);
                    h++;
                }
                foreach (int item in anwser) Console.Write("{0}  ", item);
                Console.WriteLine("\n{0}\n", remember[0]);
            }
        }


難度
☆☆☆☆
問題
給你十進位的數字 N,請你把他轉換成 3 進位。

* 中文翻譯:Lucky  

Input
輸入包含多組測試資料。每組測試資料一列有1個整數 N0 <= N < 1000000001)。
N<0 時,代表輸入結束。

Output
每組測試資料輸出一列,輸出 N 3 進位表示。

Sample Input 
0
1
2
3
10
100
1000
-9

Sample Output
0
1
2
10
101
10201
1101001

方法一
static void Main(string[] args)
        {
            while (true)
            {
                int Input = Convert.ToInt32(Console.ReadLine());
                if (Input < 0) return;
                int n = 0;
                int[] anwser = new int[30];
                while (Input >= 3)
                {
                    anwser[n] = Input % 3;
                    Input /= 3;
                    n++;
                }
                anwser[n] = Input;
                for (int i = n; i >= 0; i--)               
                    Console.Write(anwser[i]);
                Console.WriteLine("\n");
            }
        }
方法二
static void Main(string[] args)
        {
            while (true)
            {
                double n = Convert.ToInt32(Console.ReadLine()), pow =0;
                List<int> anwser = new List<int>();
                if (n < 0) return;
                while (n / Math.Pow(3, pow) > 3) pow++;
                for (int i = (int)pow; i >= 0; i--)
                {
                    for (int j = 2; j >= 0; j--)
                    {
                        if (n - Math.Pow(3, i) * j >= 0)
                        {
                            n = n - Math.Pow(3, i) * j;
                            anwser.Add(j);
                            break;
                        }
                    }
                }
                foreach (var item in anwser)
                    Console.Write(item);
                Console.WriteLine("\n ");
            }
        }

沒有留言:

張貼留言

WinFormTb02

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