2015年3月18日 星期三

[2015][Homework]Team02 - Hw01



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            string year, month, day, select;
            int y, m, d, sel;
            while (true)
            {
                Console.WriteLine("請輸入題號1~6來執行以下題目");
                Console.WriteLine("第1題 阿姆斯壯數");
                Console.WriteLine("第2題 判斷閏年");
                Console.WriteLine("第3題 判斷天數");
                Console.WriteLine("第4題 判斷星期幾");
                Console.WriteLine("第5題 判斷日期是否合法");
                Console.WriteLine("第6題 判斷日期相差天數");
                Console.WriteLine("請輸入非1~6的數字來結束程式");
                select=Console.ReadLine();
                sel = int.Parse(select);
                switch(sel)
                {
                    case 1:
                        //第1題 阿姆斯壯數
                        int a = 0;
                        int b = 0;
                        int c = 0;
                        double sum = 0;
                        Console.WriteLine("顯示100~999間的阿姆斯壯數");
                        for (int i = 100; i <= 999; i++)
                        {
                            a = i / 100;
                            b = i / 10 % 10;
                            c = i % 10;
                            sum = Math.Pow((double)a, 3) + Math.Pow((double)b, 3) + Math.Pow((double)c, 3);
                            if (sum == i)
                                Console.WriteLine("{0}", i);
                        }
                        Console.ReadKey();
                        Console.Clear();
                        break;
                    case 2:
                        //第2題 判斷閏年
                        Console.WriteLine("請輸入年分");
                        year = Console.ReadLine();
                        y = int.Parse(year);
                        if (y % 4 == 0 && y % 100 != 0)
                            Console.WriteLine("{0}年是閏年", y);
                        else if (y % 400 == 0)
                            Console.WriteLine("{0}年是閏年", y);
                        else
                            Console.WriteLine("{0}這年不是閏年", y);
                        Console.ReadKey();
                        Console.Clear();
                        break;
                    case 3:
                        //第3題 判斷天數
                        Console.WriteLine("請輸入年分");
                        year = Console.ReadLine();
                        y = int.Parse(year);
                        Console.WriteLine("請輸入月分");
                        month = Console.ReadLine();
                        m = int.Parse(month);
                        if (m > 12)
                            Console.WriteLine("這不是月份,呆呆!");
                        else if (m == 2)//閏年2月有29天
                        {
                            if (y % 4 == 0 && y % 100 != 0)
                                Console.WriteLine("{0}年的{1}月有29天", y, m);
                            else if (y % 400 == 0)
                                Console.WriteLine("{0}年的{1}月有29天", y, m);
                            else
                                Console.WriteLine("{0}年的{1}月有28天", y, m);
                        }
                        else if (m % 2 == 0 && m >= 8)
                            Console.WriteLine("這個月有31天");
                        else if (m % 2 == 1 && m <= 7)//基數月有31天
                            Console.WriteLine("這個月有31天");
                        else
                            Console.WriteLine("這個月有30天");
                        Console.ReadKey();
                        Console.Clear();
                        break;

                    case 4:
                        //第4題 判斷星期幾
                        Console.WriteLine("請輸入年分");
                        year = Console.ReadLine();
                        y = int.Parse(year);
                        Console.WriteLine("請輸入月分");
                        month = Console.ReadLine();
                        m = int.Parse(month);
                        Console.WriteLine("請輸入日期");
                        day = Console.ReadLine();
                        d = int.Parse(day);
                        int week;
                        //基姆拉爾森公式,需將1月和2月看成是上一年的13月和14月
                        if (m == 1 || m == 2)
                        {
                            m += 12;
                            y--;
                        }
                        week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400 + 1) % 7;
                        switch (week)
                        {
                            case 1:
                                Console.WriteLine("這天星期一");
                                break;
                            case 2:
                                Console.WriteLine("這天星期二");
                                break;
                            case 3:
                                Console.WriteLine("這天星期三");
                                break;
                            case 4:
                                Console.WriteLine("這天星期四");
                                break;
                            case 5:
                                Console.WriteLine("這天星期五");
                                break;
                            case 6:
                                Console.WriteLine("這天星期六");
                                break;
                            case 0:
                                Console.WriteLine("這天星期天");
                                break;
                        }
                        Console.ReadKey();
                        Console.Clear();
                        break;
                        
                    case 5:
                        //第5題 判斷日期合法與否
                        Console.WriteLine("請輸入年分");
                        year = Console.ReadLine();
                        y = int.Parse(year);
                        Console.WriteLine("請輸入月分");
                        month = Console.ReadLine();
                        m = int.Parse(month);
                        Console.WriteLine("請輸入日期");
                        day = Console.ReadLine();
                        d = int.Parse(day);
                        if (d > 31||m>12)
                            Console.WriteLine("此日期不合法");
                        else if (d == 31 && m % 2 == 0)
                        {
                            if ((m == 8)||(m==10)||(m==12))
                                Console.WriteLine("此日期合法");
                            else
                                Console.WriteLine("此日期不合法");
                        }
                        else if (d >= 30 && m == 2)
                            Console.WriteLine("此日期不合法");
                        else if (d == 29&&m==2)
                        {
                            if (y % 4 == 0)
                            {
                                if (y % 100 == 0 && y % 400 != 0)
                                    Console.WriteLine("此日期不合法");
                                else
                                    Console.WriteLine("此日期合法");
                            }
                            else
                                Console.WriteLine("此日期不合法");
                        }
                        else
                            Console.WriteLine("此日期合法");
                        Console.ReadKey();
                        Console.Clear();
                        break;

                    case 6:
                        //第6題 判斷日期相差天數
                        int sumyear = 0;
                        int sum1=0, sum2=0;
                        int day1, day2;
                        int monthday;
                        int leapyear=0;
                        Console.WriteLine("請輸入第一個日期:範例:20150210");
                        int date1 = int.Parse(Console.ReadLine());
                        Console.WriteLine("請輸入第二個日期:範例:20150416");
                        int date2 = int.Parse(Console.ReadLine());
                        int y1 = date1 / 10000;
                        int m1 = date1 % 10000 / 100;
                        int d1 = date1 % 100;
                        int y2 = date2 / 10000;
                        int m2 = date2 % 10000 / 100;
                        int d2 = date2 % 100;
                        for (day1 = 1; day1 < d1; day1++) ;
                        for (day2 = 1; day2 < d2; day2++) ;
                        //date1
                        if ((y1 % 4 == 0 && y1 % 100 != 0) || (y1 % 400 == 0))//潤
                        {
                            for (m = 1; m < m1; m++)
                            {
                                if (m == 2)
                                    monthday = 29;
                                else if (m <= 8 && m % 2 == 1)
                                    monthday = 31;
                                else if (m <= 8 && m % 2 == 0)
                                    monthday = 30;
                                else if (m > 8 && m % 2 == 0)
                                    monthday = 30;
                                else
                                    monthday = 31;
                                sum1 = sum1+ monthday;
                            }

                        }
                        else
                        {
                            for (m = 1; m < m1; m++)
                            {
                                if (m == 2)
                                    monthday = 28;
                                else if (m <= 8 && m % 2 == 1)
                                    monthday = 31;
                                else if (m <= 8 && m % 2 == 0)
                                    monthday = 30;
                                else if (m > 8 && m % 2 == 0)
                                    monthday = 30;
                                else
                                    monthday = 31;
                                sum1 = sum1 + monthday;
                            }
                        }
                        sum1 = sum1 + day1;
                        //date2
                        if ((y2 % 4 == 0 && y2 % 100 != 0) || (y2 % 400 == 0))//潤
                        {
                            for (m = 1; m < m2; m++)
                            {
                                if (m == 2)
                                    monthday = 29;
                                else if (m <= 8 && m % 2 == 1)
                                    monthday = 31;
                                else if (m <= 8 && m % 2 == 0)
                                    monthday = 30;
                                else if (m > 8 && m % 2 == 0)
                                    monthday = 30;
                                else
                                    monthday = 31;
                                sum2 = sum2 + monthday;
                            }

                        }
                        else
                        {
                            for (m = 1; m < m2; m++)
                            {
                                if (m == 2)
                                    monthday = 28;
                                else if (m <= 8 && m % 2 == 1)
                                    monthday = 31;
                                else if (m <= 8 && m % 2 == 0)
                                    monthday = 30;
                                else if (m > 8 && m % 2 == 0)
                                    monthday = 30;
                                else
                                    monthday = 31;
                                sum2 = sum2 + monthday;
                            }
                        }
                        sum2 = sum2 + day2;
                        //year
                        for (int i = y1; i < y2; i++)
                        {
                            
                            if (i % 4 == 0 && i % 100 != 0)//潤
                            {
    
                                leapyear++;

                            }
                            else if (i % 400 == 0)
                            {
                                
                                leapyear++;
                            }
                            else
                                sumyear++;
                            
                        }
                        sumyear = sumyear * 365 + leapyear * 366;
                        Console.WriteLine("{0}天", sumyear - sum1 + sum2 - 1);
                            
                         Console.ReadKey();
                         Console.Clear();
                         break;
                    default:
                        return ;
                }
            }
            
        }
    }
}

5 則留言:

  1. Console.ReadKey();
    Console.Clear();
    這兩行可以放在switch...case...外面,減少重複的程式碼.

    回覆刪除

  2. 一行只有一個變數(12、13180、181):
    可以減少變數
    select=Console.ReadLine();
    sel = int.Parse(select);
    >>>>sel = int.Parse(Console.ReadLine());
    第五題為判斷奇數月(11月31天為合法??)
    命名使用Camel Case(179、182):
    sumyear=>sumYear;
    monthDay=>monthDay;
    leapyear=>leapYear;
    盡量使用有意義的字(181、188~193)
    可以使用inputYear、finalYear、inputDayTotal
    不要y1,m1....
    註解:"閏"年,月"份"

    回覆刪除