真不知道為什麼要用很華麗的方式去解問題.....
解問題不是越簡單越好嗎?
題目是:
畫出這個圖
*****
***
*
***
*****
長寬是死的,不會變,也沒要求要能改變
那直接畫真的最簡單.....
用這麼複雜的方式寫幹什麼呢?
============使用委派兼物件導向的版本(惡搞)===========
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Show漏斗
{
Action 畫漏斗;
string 漏斗 = "*****n *** n * n *** n*****n";
public Show漏斗()
{
foreach(char A in 漏斗)
{
switch (A)
{
case '*':
畫漏斗 += ShowStart;
break;
case ' ':
畫漏斗 += ShowSpace;
break;
case 'n':
畫漏斗 += NextLine;
break;
}
}
}
public void ShowStart()
{
Console.Write("*");
}
public void ShowSpace()
{
Console.Write(" ");
}
public void NextLine()
{
Console.WriteLine();
}
public void Run()
{
畫漏斗();
}
}
class Program
{
static void Main(string[] args)
{
Show漏斗 漏斗 = new Show漏斗();
漏斗.Run();
}
}
}
=======================(可自由輸入寬高之版本)=========================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int 寬,高;
ReStart1:
Console.WriteLine("請輸入邊長:");
try
{
寬 = Convert.ToInt32(Console.ReadLine());
if (寬 < 1) throw new Exception();
}
catch
{
Console.WriteLine("輸入錯誤!");
goto ReStart1;
}
ReStart2:
Console.WriteLine("請輸入高:");
try
{
高 = Convert.ToInt32(Console.ReadLine());
if (高 < 1) throw new Exception();
}
catch
{
Console.WriteLine("輸入錯誤!");
goto ReStart2;
}
float 級距 = (float)寬 / (float)高;
float 半寬 = (float)寬 / 2.0F;
float 半高 = (float)高 / 2.0F;
//高迴圈
//Console.WriteLine("級距:{0},半寬:{1},半高:{2}", 級距, 半寬, 半高); //debug用
for (int 繪高 = 1; 繪高 <= 高; 繪高++)
{
float 下邊界,上邊界;
下邊界 = 級距 * (float)(((繪高 <= 半高) ? (繪高-1) : (高-繪高)));
上邊界 = 寬 - 下邊界+1;
//寬迴圈
for (int 繪寬 = 1; 繪寬 <= 寬; 繪寬++)
{
Console.Write( (繪寬 > 下邊界 && 繪寬 < 上邊界) ? "*" : " ");
}
//Console.Write(" 上邊界:{0},下邊界:{1}", 上邊界, 下邊界); //debug用
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("再畫一次?Y / (N or Anykey)");
if (Console.ReadKey(true).Key == ConsoleKey.Y) goto ReStart1;
}
}
}
--
我... 我一點都不糟糕啦!>///<
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.27.109.99