C#常見算法題目(面試准備),
1.寫出冒泡,選擇,插入排序算法。

//冒泡排序

public class bubblesorter

{

public void sort(int[] list)

{

int i, j, temp;

bool done = false;

j = 1;

while ((j < list.Length) && (!done))

{

done = true;

for (i = 0; i < list.Length - j; i++)

{

if (list[i] > list[i + 1])

{

done = false;

temp = list[i];

list[i] = list[i + 1];

list[i + 1] = temp;

}

}

j++;

}

}

}

//選擇排序

public class selectionsorter

{

private int min;

public void sort(int[] list)

{

for (int i = 0; i < list.Length - 1; i++)

{

min = i;

for (int j = i + 1; j < list.Length; j++)

{

if (list[j] < list[min])

min = j;

}

int t = list[min];

list[min] = list[i];

list[i] = t;

}

}

}

//插入排序

public class insertionsorter

{

public void sort(int[] list)

{

for (int i = 1; i < list.Length; i++)

{

int t = list[i];

int j = i;

while ((j > 0) && (list[j - 1] > t))

{

list[j] = list[j - 1];

--j;

}

list[j] = t;

}

}

}
2.有一列數1,1,2,3,5,........求第30個數.

public class MainClass

{

public static void Main()

{

Console.WriteLine(Foo(30));

}

public static int Foo(int i)

{

if (i <= 0)

return 0;

else if (i > 0 && i <= 2)

return 1;

else return Foo(i - 1) + Foo(i - 2);

}

}
3. 程序設計: 貓大叫一聲,所有的老鼠都開始逃跑,主人被驚醒。

public delegate void SubEventHandler();

public abstract class Subject

{

public event SubEventHandler SubEvent;

protected void FireAway()

{

if (this.SubEvent != null)

this.SubEvent();

}

}

public class Cat : Subject

{

public void Cry()

{

Console.WriteLine(cat cryed.);

this.FireAway();

}

}

public abstract class Observer

{

public Observer(Subject sub)

{

sub.SubEvent += new SubEventHandler(Response);

}

public abstract void Response();

}

public class Mouse : Observer

{

private string name;

public Mouse(string name, Subject sub) : base(sub)

{

this.name = name;

}

public override void Response()

{

Console.WriteLine(name + attempt to escape!);

}

}

public class Master : Observer

{

public Master(Subject sub) : base(sub){}

public override void Response()

{

Console.WriteLine(host waken);

}

}

class Class1

{

static void Main(string[] args)

{

Cat cat = new Cat();

Mouse mouse1 = new Mouse(mouse1, cat);

Mouse mouse2 = new Mouse(mouse2, cat);

Master master = new Master(cat);

cat.Cry();

}


}
4.有一個字符串 "I am a good man",設計一個函數,返回 "man good a am I"。
5.A、B、C、D、E五名學生有可能參加計算機競賽,根據下列條件判斷哪些
人參加了競賽:
(1)A參加時,B也參加;
(2)B和C只有一個人參加;
(3)C和D或者都參加,或者都不參加;
(4)D和E中至少有一個人參加;
(5)如果E參加,那麼A和D也都參加。

static void Main(string[] args)

{


char[] name={'A','B','C','D','E'};

int[] value = new int[5];

for (value[0]=0;value[0]<2;value [0]++)

for (value[1]=0; value[1] < 2; value[1]++)

for (value[2]=0; value[2] < 2; value[2]++)

for (value[3]=0; value[3] < 2; value[3]++)

for (value[4]=0; value[4] < 2; value[4]++)

{

if ((value[1] >= value[0]) && (value[1] + value[2] == 1) && (value[2] == value[3]) && (value[3] + value[4]==1) && (value[4]==0 || value[4]==1 && value[0]==1 && value[3]==1))

{

for (int i = 0; i < 5; i++)

{

if (value[i]==1)

{

Console.WriteLine("{0}參加", name[i]);

}

else

{

Console.WriteLine("{0}不參加", name[i]);

}

}

}

}

}
6.題目:
a user entered an integer value into a text box. Without using a buit-in library, convert the numeric string to its integer representation.

static int StringTolnt(string s)

{

int sum = 0;

for (int i = 0; i < s.Length; i++)

sum = sum * 10 + (s[i] - '0');

return sum;

}
C語言&& || !分別是什
&是取址運算符,作用是提取一個變量的地址。
比如你定義了一個變量,那麼在編譯時,系統就會在內存中分配一個空間。
而這個空間在內存中的位置就是它的地址。&就提取它的地址。
e.g int a;在編譯時就給它分配一個地址,比如是2000;&a就是2000。
假如先定義了一個整型指針變量p,p=&a;就是把a的地址2000賦給p。運行後p=2000。
又如scanf("%d",&a);當你輸入3時,它會先根據&a知道a的地址,由地址找到a在內存中的空間,再把3寫入這個空間。
*是指針運算符,作用與&相反,它是根據變量的地址取出變量的值。
比如,*a的值就是變量a的值3。
下面是定義和聲明中用到指針的小結
int *p; 定義一個指向整型數據的指針。
int *p[n]; 定義指針數組p,它由n個指向整型數據的指針元素組成。
int (*p)[n]; p為指向含n個元素的一維數組的指針變量。
int *p(); p為返回一個指針的函數,該指針指向整型數據。
int (*p)(); p為指向函數的指針,該函數返回一個整型值
int **p; p是一個指針變量,它指向一個指向整型數據的指針變量。
如果你想系統的了解建議你可以看看譚浩強的《c程序設計》(第三版)這本書通俗易懂。是學習c語言不錯的教材。
C語言&& || !分別是什
&是取址運算符,作用是提取一個變量的地址。
比如你定義了一個變量,那麼在編譯時,系統就會在內存中分配一個空間。
而這個空間在內存中的位置就是它的地址。&就提取它的地址。
e.g int a;在編譯時就給它分配一個地址,比如是2000;&a就是2000。
假如先定義了一個整型指針變量p,p=&a;就是把a的地址2000賦給p。運行後p=2000。
又如scanf("%d",&a);當你輸入3時,它會先根據&a知道a的地址,由地址找到a在內存中的空間,再把3寫入這個空間。
*是指針運算符,作用與&相反,它是根據變量的地址取出變量的值。
比如,*a的值就是變量a的值3。
下面是定義和聲明中用到指針的小結
int *p; 定義一個指向整型數據的指針。
int *p[n]; 定義指針數組p,它由n個指向整型數據的指針元素組成。
int (*p)[n]; p為指向含n個元素的一維數組的指針變量。
int *p(); p為返回一個指針的函數,該指針指向整型數據。
int (*p)(); p為指向函數的指針,該函數返回一個整型值
int **p; p是一個指針變量,它指向一個指向整型數據的指針變量。
如果你想系統的了解建議你可以看看譚浩強的《c程序設計》(第三版)這本書通俗易懂。是學習c語言不錯的教材。