C#:算法题
1. 将字符串s1中所有出现在字符串s2中的字符删去
using System; namespace ConsoleApplication56 { class Program { static void Main(string[] args) { string s1 = "aaabbccabfcabcc"; string s2 = "abcd"; char[] results = new char[s1.Length]; int m=0; int j, i; for (i = 0; i < s1.Length; i++) { for (j=0; j < s2.Length; j++) { if (s1[i] != s2[j]) { continue; } else { j = 0; break; } } if (j == s2.Length) { results[m++] = s1[i]; } } foreach (char a in results) { Console.WriteLine(a.ToString()); } Console.ReadLine(); } } }
2. 计算数字出现次数(using LinkedList)
using System; using System.Collections.Generic; namespace ConsoleApplication57 { class Program { static void Main(string[] args) { int[] nums = { 1, 2, 3, 4, 2, 1 }; int count = 0; if (nums != null) { LinkedList<int> numbers = new LinkedList<int>(nums); int givenInt = 1; LinkedListNode<int> currentNode = numbers.First; while (currentNode != null) { if (currentNode.Value == givenInt) { count++; } currentNode = currentNode.Next; } } Console.WriteLine(count); Console.ReadLine(); } } }
3.I have two strings the ending substring of first is the starting substring of the second,ex
string left : ONESTRING
string right : STRINGTWO
I have to merge them so that the resulting string is
result string : ONESTRINGTWO
using System; namespace ConsoleApplication58 { class Program { static void Main(string[] args) { string left = "OneStart"; string right = "StartTwo"; string result = FindAndMerge(left, right); Console.WriteLine(result); Console.ReadLine(); } public static string FindAndMerge(string left,string right) { int i=0; string result=string.Empty; for (i = right.Length; i >= 0; i--) { if (left.Contains(right.Substring(0, i))) { break; } } if (i < right.Length) { result = right.Substring(i); } result = left + result; return result; } } }
4. 删除重复元素
using System; namespace ConsoleApplication41 { class Program { static void Main(string[] args) { Console.WriteLine("Please input the size of the int Array:"); int size = Int32.Parse(Console.ReadLine()); int[] array = new int[size]; Console.WriteLine("Please input {0} numbers:", size); if (size > 0) { for (int i = 0; i < size; i++) { array[i] = GetInputNum(); } int[] result = DelDupElements(array); foreach (int i in result) { Console.WriteLine(i); } } else { Console.WriteLine("Please input new array with more than zero numbers"); } Console.ReadLine(); } /// <summary> /// /// </summary> /// <returns></returns> public static int GetInputNum() { try { return Int32.Parse(Console.ReadLine()); } catch { Console.WriteLine("Please input a number"); return GetInputNum(); } } /// <summary> /// /// </summary> /// <param name="a"></param> /// <returns></returns> public static int[] DelDupElements(int[] a) { // Special judgement if (a.Length == 0) { Console.WriteLine("Please input new array with more than zero numbers"); return null; } else { // Sort the array Sort(a); Console.WriteLine("The sorted array:"); foreach (int i in a) { Console.WriteLine(i); } Console.ReadLine(); int[] resultArrary; int j = 1; int size = 1; for (int i = 1; i < a.Length; i++) { if (a[i] != a[i - 1]) { size++; } } resultArrary = new int[size]; resultArrary[0] = a[0]; for (int i = 1; i < a.Length; i++) { if (a[i] != a[i - 1]) { resultArrary[j++] = a[i]; } } return resultArrary; } } /// <summary> /// /// </summary> /// <param name="a"></param> public static void Sort(int[] a) { int temp; for (int i = 1; i < a.Length; i++) { for (int j = 0; j < a.Length - i; j++) { if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } } } }
另外几种种写法:
public static void DeleteDuplicateNumbers(int[] array) { if (array != null) { List<int> result = new List<int>(); if (array.Length > 1) { for (int i = 0; i < array.Length; i++) { if (!result.Contains(array[i])) { result.Add(array[i]); } } } else { result.Add(array[0]); } foreach (int i in result) { Console.WriteLine(i); } Console.ReadLine(); } }
public static void DeleteDuplicateNumbersUsingIndexOf(int[] array) { if (array != null) { List<int> result = new List<int>(); if (array.Length > 1) { for (int i = 0; i < array.Length; i++) { if (result.IndexOf(array[i]) < 0) { result.Add(array[i]); } } } else { result.Add(array[0]); } foreach (int i in result) { Console.WriteLine(i); } Console.ReadLine(); } else { Console.WriteLine("The array is null"); } }
public static void DeleteDuplicateNumbersUsingInsert(int[] array) { if (array != null) { List<int> result = new List<int>(); result.Add(array[0]); if (array.Length > 1) { for (int i = 1; i < array.Length; i++) { if (array[i] < result[0]) { result.Insert(0, array[i]); } else if (array[i] > result[result.Count - 1]) { result.Add(array[i]); } else { for (int j = 1; j < result.Count-1; j++) { if (array[i] > result[j-1] && array[i] < result[j]) { result.Insert(j, array[i]); } } } } } foreach (int i in result) { Console.WriteLine(i); } Console.ReadLine(); } }
public static int[] DeleteDuplicateNumbersUsingArrayList(int[] list) { ArrayList arr = new ArrayList(); for (int i = 0; i < list.Length - 1; i++) { if (list[i] != list[i + 1]) { arr.Add(list[i]); } } arr.Add(list[list.Length - 1]); int[] getarr = new int[arr.Count]; for (int i = 0; i < arr.Count; i++) { getarr[i] = Convert.ToInt32(arr[i]); } return getarr; }
5. 合并有序数组
using System; namespace ConsoleApplication62 { class Program { static void Main(string[] args) { int[] a = { 1, 2, 2, 3, 5, 6, 7, 7 }; int[] b = { 1, 2, 3, 4, 8, 8, 9, 10, 11, 12, 12, 13, 14 }; int[] c = MergeList(a, b); foreach (int i in c) { Console.WriteLine(i); } Console.ReadLine(); } public static int[] MergeList(int[] a, int[] b) { if (checkSort(a) && checkSort(b)) { int len = a.Length + b.Length; int[] result = new int[len]; int i = 0, j = 0, k = 0; while (i < a.Length && j < b.Length) { if (a[i] < b[j]) { result[k++] = a[i++]; } else { result[k++] = b[j++]; } } while (i < a.Length) { result[k++] = a[i++]; } while (j < b.Length) { result[k++] = b[j++]; } return result; } else { return null; } } public static bool checkSort(int[] a) { for (int i = 0; i < a.Length - 1; i++) { for (int j = i + 1; j < a.Length; j++) { if (a[j - 1] > a[j]) { return false; } } } return true; } } }
6. 有一列数1,1,2,3,5,........求第30个数.
public class MainClass { public static void Main() { Console.WriteLine(Foo(12)); Console.ReadLine(); } 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); } }
7. 冒泡排序、选择排序、插入排序
// 冒泡排序 bubble sort public static int[] BubbleSort(int[] array) { int temp; bool isDone = false; for (int i = 0; i < array.Length && !isDone; i++) { isDone = true; for (int j = 0; j < array.Length - i - 1; j++) { if (array[j] > array[j + 1]) { isDone = false; temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } return array; }
// 插入排序 Insertion sort public static int[] InsertionSort(int[] array) { for (int i = 1; i < array.Length; i++) { int current = array[i]; int j = i; while (j > 0 && current < array[j - 1]) { array[j] = array[j - 1]; j--; } array[j] = current; } return array; }
// 选择排序 Selection sort public static int[] SelectionSort(int[] array) { for (int i = 0; i < array.Length; i++) { int min = i; for (int j = i + 1; j < array.Length; j++) { if (array[j] < array[min]) { min = j; } } int temp = array[i]; array[i] = array[min]; array[min] = temp; } return array; }
8. 找第二大的数
// 获得数组中的第二大数 public static int SecondMax(int[] array) { int max = array[0]; int secondMax = array[0]; for (int i = 0; i < array.Length; i++) { if (array[i] > max) { secondMax = max; max = array[i]; } else if (array[i] > secondMax && array[i] != max) { secondMax = array[i]; } } if (secondMax == max) { throw new Exception("Have no second max!"); } return secondMax; }
9. 有一个字符串 "I am a good man",设计一个函数,返回 "man good a am I"
// 反转单词顺序 public static string WordReverse(string str) { char[] array = str.ToArray(); CharArrayReverse(array, 0, array.Length - 1); int start = -1; int end = -1; for (int i = 0; i < array.Length; i++) { if (!((array[i] >= 'a' && array[i] <= 'z') || (array[i] >= 'A' && array[i] <= 'Z'))) { if (start < end) { CharArrayReverse(array, start + 1, end); } start = i; } else { end = i; } } return new string(array); } public static void CharArrayReverse(char[] array, int start, int end) { if (array != null && start < array.Length && end < array.Length) while (start < end) { char temp = array[start]; array[start] = array[end]; array[end] = temp; start++; end--; } }
10. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些 人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。
public static void Main() { 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}Join", name[i]); } else { Console.WriteLine("{0}Not Join", name[i]); } } } } } } } } Console.ReadLine(); }
11. a user entered an integer value into a text box. Without using a buit-in library, convert the numeric string to its integer representation.
public static int StringToInt(string s) { int sum = 0; for (int i = 0; i < s.Length; i++) { sum = sum * 10 + (s[i] - '0'); } return sum; }
posted on 2013-04-22 17:32 LilianChen 阅读(1038) 评论(0) 编辑 收藏 举报