/// <summary>
/// 寫一個函數處理字串,比如輸入”I am a girl”,輸出”girl a am I”
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
private static string StringConvert(string p)
{
string convertion = null;
Stack stack = new Stack();
int i = 0;
int j = 0;
for (int h = 0; h < p.Length; h++)
{
if (p.Substring(h,1)==" ")
{
j = h;
stack.Push(p.Substring(i,j-i));
i = j + 1;
}
}
stack.Push(p.Substring(i,p.Length-i));
int count = stack.Count;
for (int m = 0; m<count; m++)
{
if (m == 0)
{
convertion = (string)stack.Pop();
}
else
{
convertion = convertion+" " + (string)stack.Pop();
}
}
return convertion;
}
------------------------------------------------------------------------------------------------------------------------
求兩個數的最大公約數【輾轉相除法】.
當兩個數都較大時,採用輾轉相除法比較方便.其方法是:
以小數除大數,如果能整除,那麼小數就是所求的最大公約數.否則就用餘數來除剛才的除數;再用這新除法的餘數去除剛才的餘數.依此類推,直到一個除法能夠整除,這時作為除數的數就是所求的最大公約數.
例如:求4453和5767的最大公約數時,可作如下除法.
5767÷4453=1餘1314
4453÷1314=3餘511
1314÷511=2餘292
511÷292=1餘219
292÷219=1餘73
219÷73=3
於是得知,5767和4453的最大公約數是73.
輾轉相除法適用比較廣,比短除法要好得多,它能保證求出任意兩個數的最大公約數.
/// <summary>
/// 輾轉相除法:求兩個數的最大公約數
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
private static int Gcd(int num1, int num2)
{
int gcd=0;
if (num1==num2)
{
gcd = num1;
}
if (num1>num2)
{
int tmp = num1;
num1 = num2;
num2 = tmp;
}
if (num2 % num1 == 0)
{
gcd = num1;
}
else
{
int tmp = num1;
num1 = num2 % num1;
num2 = tmp;
gcd = Gcd(num1, num2);
}
return gcd;
}
P.S: 最小公倍數 = 二數中的大數/最大公約數)*小數
------------------------------------------------------------------------------------------------------------------------
/// <summary>
/// 求int[]數組裡面最大和第二大的數
/// </summary>
/// <param name="max"></param>
/// <param name="second"></param>
/// <param name="a"></param>
private static void MaxAndSecond(ref int max, ref int second, int[]a)
{
max = second = a[0];
for (int i = 0; i < a.Length; i++)
{
if (a[i]>max)
{
second = max;
max = a[i];
}
else if(a[i]>second)
{
second = a[i];
}
}
}
------------------------------------------------------------------------------------------------------------------------
/// <summary>
/// 求1~N的素數
/// </summary>
/// <param name="p"></param>
private static void PrintPrime(int p)
{
if (p>=2)
{
System.Console.WriteLine("Parime:" + 2);
}
//不需要判斷2以外的偶數,因為它們都不是素數,而i從非偶數3開始計數
for (int i = 3; i <= p; i = i + 2)
{
if (IsPrime(i))
{
System.Console.WriteLine("Parime:" + i);
}
}
Console.Read();
}
private static bool IsPrime(int n)
{
//1,2的處理
if (n==1)
{
return false;
}
if (n == 2)
{
return true;
}
//1,2以外的數的處理
else
{
for (int i = 2; i < Math.Sqrt(n) + 1; i++)
{
if (n % i == 0)
return false;
}
}
return true;
}
P.S: 1不是素數。
------------------------------------------------------------------------------------------------------------------------
/// <summary>
/// 實現一個函數,要求在字串strA中找出strB出現的次數
/// </summary>
/// <param name="strA"></param>
/// <param name="strB"></param>
/// <returns></returns>
private static int GetSubStrCount(char[] strA, char[] strB)
{
int count = 0;
for (int i = 0; i < strA.Length; i++)
{
int length = 0;
int iA = i;
for (int j = 0; j < strB.Length; j++)
{
if (strB[j] != strA[iA])
{
break;
}
else
{
length = j+1;
iA++;
}
}
if (length==strB.Length)
{
count++;
}
}
return count;
}