您的位置:首页 > 职场人生

常见面试算法小题目分享~更新ing~

2011-03-10 23:23 609 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace InterviewPraticeApp
{
class Program
{
private string result = string.Empty;
static void Main(string[] args)
{
Console.WriteLine("********** 测试开始线 **********");
//Program pp = new Program();
//string testString = Console.ReadLine();
//PrintOddStars(int.Parse(testString));
int[] testArray = { 1, 2, 2, 5, 6, 12, 88, 88, 99, 111, 112, 888, 999, 999 };
SearchRepeatNumberAndRemoveContains(testArray);
//Console.WriteLine("字符串反转后为:{0}", ReverseString(testString));
//int[] testArray = GenerateRandomArray(10);
//int[] testArray = { 23, 123, 32, 11, 4, 7, 1, 99, 12, 100 };
//InsertSort(testArray);
//PrintSortArray(testArray);
//JudgeRepeatValues(testArray, testArray.Length);
//int[] testArray2 = { 23, 123, 32, 11, 4, 7, 1, 99, 12, 100 };
//PrintStar(int.Parse(testString));
//CalculateLetterCountInString(testString);
//JudgeLetterCount(testString);
//ResortString(testString);
//BubbleSort(testArray);
//Console.WriteLine();
//SelectSort(testArray2);
//BuildTenThousandsRandomString();
//DisplayDoubleValue();
//int result = CalculateNumber(int.Parse(testString));
//CalculateSum(int.Parse(testString));
//string message = pp.TransformToBinary(int.Parse(testString));
//Console.WriteLine(message);
//Console.WriteLine("第{0}个数为{1}", testString, result);
//float number = -123.456f;
//int result = (int)number;
//Console.WriteLine(result);
//Console.WriteLine(SumTheseNumbers(int.Parse(testString)));
//string message = Convert.ToString(10, 16);
//Console.WriteLine(message);
//int[] testArray1 = { 1, 2, 5, 7, 8, 9, 11, 55, 77, 99, 1000 };
//int[] testArray2 = { 2, 4, 5, 10, 100, 102, 103, 104, 105, 1011, 1200 };
//CombineTwoArrayToNewArray(testArray1, testArray2);
//int testNumber = 124536589;
//List<int> resultList = new List<int>();
//int[] result = TransformIntToArrayByMod(testNumber, resultList);
//foreach (int item in result)
//{
// Console.Write(item + " ");
//}
Console.ReadLine();
Console.WriteLine("********** 测试结束线 **********");

}

#region 基本排序-冒泡排序
private static void BubbleSort(int[] targetArray)
{
int length = targetArray.Length;
int temp = 0;
for (int outer = 0; outer < length - 1; outer++)
{
for (int inner = outer + 1; inner < length; inner++)
{
if (targetArray[inner] < targetArray[outer])
{
temp = targetArray[outer];
targetArray[outer] = targetArray[inner];
targetArray[inner] = temp;
}
}
PrintSortArray(targetArray, (outer + 1));
}
Console.WriteLine("冒泡排序后: /n");
foreach (int item in targetArray)
{
Console.Write(item + " ");
}
Console.WriteLine();
Console.WriteLine("测试成功!");
}
#endregion

#region 基本排序-选择排序
/// <summary>
/// 算法主要思想每次找到无序列中的最小值的索引,与无序列的第一个交换
/// </summary>
/// <param name="targetArray"></param>
private static void SelectSort(int[] targetArray)
{
int length = targetArray.Length;
int temp = 0;
for (int i = 0; i < length - 1; i++)
{
int min = i;
for (int j = i + 1; j < length; j++)
{
if (targetArray[j] < targetArray[min])
{
min = j;
}
}
temp = targetArray[i];
targetArray[i] = targetArray[min];
targetArray[min] = temp;
PrintSortArray(targetArray, (i + 1));
}
Console.WriteLine("选择排序后: /n");
foreach (int item in targetArray)
{
Console.Write(item + " ");
}
Console.WriteLine();
Console.WriteLine("测试成功!");
}
#endregion

#region 插入排序
private static void InsertSort(int[] targetArray)
{
for (int i = 1; i < targetArray.Length; i++)
{
if (targetArray[i] < targetArray[i - 1])
{
int temp = targetArray[i];
int j = 0;
for (j = i - 1; j >= 0 && temp < targetArray[j]; j--)
{
targetArray[j + 1] = targetArray[j];
}
targetArray[j + 1] = temp;
}
PrintSortArray(targetArray, i);
}
Console.WriteLine("插入排序后: /n");
foreach (int item in targetArray)
{
Console.Write(item + " ");
}
Console.WriteLine();
Console.WriteLine("测试成功!");
}
#endregion

#region 将字符串例如 I am a good man 倒叙成 man good a am I
private static void ResortString(string targetString)
{
StringBuilder sb = new StringBuilder();
List<string> resultList = new List<string>();
string[] targetArray = targetString.Split(' ');
for (int i = targetArray.Length - 1; i >= 0; i--)
{
resultList.Add(targetArray[i]);
}
foreach (string item in resultList)
{
sb.Append(item + " ");
}
Console.WriteLine(sb.ToString());
Console.WriteLine("测试成功!");
}
#endregion

#region 判断字符串中各个字母出现的次数
private static void CalculateLetterCountInString(string targetString)
{
char letter = 'a';
int index = 0;
int[] resultArrary = new int[26];
for (int i = 0; i < targetString.Length; i++)
{
if (char.IsLetter(targetString[i]))
{
index = char.ToLower(targetString[i]) - letter;
resultArrary[index]++;
}
}

for (int j = 0; j < 26; j++)
{
if (resultArrary[j] != 0)
{
Console.WriteLine("字母{0}:{1}次", letter, resultArrary[j]);
}
letter++;
}
Console.WriteLine("测试成功!");
}
#endregion

#region 判断字符串各个字母出现的次数LINQ法
private static void JudgeLetterCount(string targetString)
{
Dictionary<string, int> tempList = new Dictionary<string, int>();
for (char letter = 'a'; letter < 'z'; letter++)
{
var items = from target in targetString
where char.ToLower(target) == letter
select target;
if (items.Count() != 0)
{
tempList.Add(letter.ToString(), items.Count());
}
}
Console.WriteLine("字符串中各个字母出现次数情况如下/n");
foreach (var item in tempList)
{
Console.WriteLine("字母{0}: {1}次", item.Key, item.Value);
}
Console.WriteLine("测试成功!");
}
#endregion

#region 显示倒阶梯状*
private static void PrintStar(int count)
{
for (int i = count; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.WriteLine("测试成功!");
}
#endregion

#region 显示如下*状图
/// <summary>
///*
///***
///*****
///***
///*
///一个循环打印出上面那种图(奇数行)
/// </summary>

private static void PrintOddStars(int starNumber)
{
bool flag = starNumber % 2 == 0 ? false : true;
if (flag)
{
for (int i = 0; i <= starNumber; i = i + 2)
{
for (int j = 0; j < i + 1; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
for (int i = starNumber - 2; i >= 0; i = i - 2)
{
for (int j = 0; j < i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.WriteLine("测试成功!");
}
else
{
Console.WriteLine("您输入的不是奇数!");
}

}
#endregion

#region 一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成
private static void BuildTenThousandsRandomString()
{
Random ran = new Random();
StringBuilder sb = new StringBuilder();
char[] alphabetArray = new char[26];
char firstLetter = 'a';
for (int i = 0; i < 26; i++)
{
alphabetArray[i] = firstLetter;
firstLetter++;
}
for (int i = 0; i < 10000; i++)
{
sb.Append(alphabetArray[ran.Next(0, alphabetArray.Length)]);
}
Console.WriteLine(sb.ToString());
Console.WriteLine("测试成功!");
}
#endregion

#region 一个已经排好序的数组去掉重复数字,尽量快(LINQ法);
private static void SearchRepeatNumberAndRemove(int[] targetArray)
{
List<int> resultList = new List<int>();
List<int> repeatList = new List<int>();
for (int i = 0; i < targetArray.Length; i++)
{
resultList.Add(targetArray[i]);
}
for (int i = targetArray[0]; i <= targetArray[targetArray.Length - 1]; i++)
{
var result = from target in targetArray
where target == i
select target;
if (result.Count() > 1)
{
repeatList.Add(i);
resultList.Remove(i);
}
}
Console.WriteLine("去重之前的原始数组为:");
PrintSortArray(targetArray);
Console.WriteLine("去重之后的结果数组为:");
PrintSortArray(resultList);
Console.WriteLine("其中重复数数组为:");
PrintSortArray(repeatList);
Console.WriteLine("测试成功!");
}
#endregion

#region 一个已经排好序的数组去掉重复数字Contains法
private static void SearchRepeatNumberAndRemoveContains(int[] targetArray)
{
List<int> resultList = new List<int>();
List<int> repeatList = new List<int>();
foreach (int item in targetArray)
{
if (!resultList.Contains(item))
{
resultList.Add(item);
}
else
{
repeatList.Add(item);
}
}
Console.WriteLine("去重之前的原始数组为:");
PrintSortArray(targetArray);
Console.WriteLine("去重之后的结果数组为:");
PrintSortArray(resultList);
Console.WriteLine("其中重复数数组为:");
PrintSortArray(repeatList);
Console.WriteLine("测试成功!");
}
#endregion

#region 判断是否有重复值
/// <summary>
/// 已知有一长度为100的无序随机整型数组,且数值范围是[1,100],
/// 写一算法,判断数组中是否有存在重复值,要求,不得嵌套循环,不得使用递归
/// </summary>
/// <param name="targetArray"></param>
private static void JudgeRepeatValues(int[] targetArray, int length)
{
List<int> repeatList = new List<int>();
for (int i = 1; i < length + 1; i++)
{
var results = from target in targetArray
where target == i
select target;
if (results.Count() > 1)
{
repeatList.Add(i);
}
if (i >= length)
{
if (repeatList.Count() != 0)
{
Console.WriteLine("有重复值:/n");
foreach (int item in repeatList)
{
Console.Write(item + " ");
}
Console.WriteLine();
Console.WriteLine("测试结束!");
}
else
{
Console.WriteLine("该数组无重复值");
Console.WriteLine("测试结束!");
}
}
}

}
#endregion

#region 1, 1, 2, 3, 5, 8, 13, 21, 34, 55...计算第n个数
public static int CalculateNumber(int n)
{
if (n <= 0)
{
return 0;
}
else if (n > 0 && n <= 2)
{
return 1;
}
else
{
return CalculateNumber(n - 1) + CalculateNumber(n - 2);
}
}

#endregion

#region 求表达式的值:1+3+5+7+…..+n
private static void CalculateSum(int n)
{
int sum = 0;
if (n % 2 == 0)
{
MessageBox.Show("你输入的不是奇数!");
}
else
{
for (int i = 1; i <= n; i = i + 2)
{
sum += i;
}
}
Console.WriteLine("数组串总和为:{0}", sum);
}
#endregion

#region 计算n的阶层
private static int CalculateNResult(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n * CalculateNResult(n);
}
}
#endregion

#region 写一个输入整数(如123456789)转换为二进制的程序,如输入32则输出1000000
private string TransformToBinary(int targetNumber)
{
string sb = string.Empty;
if (targetNumber == 0)
{
sb = "0";
}
if (targetNumber > 0)
{
TransformToBinary(targetNumber / 2);
sb = (targetNumber % 2).ToString();
}
result += sb;
return result;
}
#endregion

#region 写一个函数,当参数N很大的时候,计算下列算式的结果:1-2+3-4+5-6+7-8+…n
private static long SumTheseNumbers(int n)
{
long sum = 0;
for (int i = 1; i <= n; i++)
{
int number = i;
if (number % 2 == 0)
{
number = -number;
}
sum += number;
}
return sum;
}
#endregion

#region 写一个实现对一段字符串翻转的方法,附加一些条件,如其中包括“,”、“.”,对其设计测试用 例
private static string ReverseString(string targetString)
{
char[] resultString = targetString.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = resultString.Length - 1; i >= 0; i--)
{
sb.Append(resultString[i]);
}
Console.WriteLine("测试成功!");
return sb.ToString();
}
#endregion

#region 转化int型数内的每个数组为整形数组
private static int[] TransformIntToArray(int targetNumber)
{
List<int> resultList = new List<int>();
string targetNumberString = targetNumber.ToString();
for (int i = 0; i < targetNumberString.Length; i++)
{
int number = int.Parse(targetNumberString[i].ToString());
resultList.Add(number);
}
return resultList.ToArray();
}
#endregion

#region 转化int型数内的每个数组为整形数组(取余法)
private static int[] TransformIntToArrayByMod(int targetNumber, List<int> resultList)
{
int number = targetNumber / 10;
int mod = targetNumber % 10;
resultList.Add(mod);
if (number > 0)
{
TransformIntToArrayByMod(number, resultList);
}
resultList.Reverse(0, resultList.Count);
Console.WriteLine("测试成功!");
return resultList.ToArray();
}
#endregion

#region 将2个递增数组组合为一个新的递增数组
private static void CombineTwoArrayToNewArray(int[] targetArray1, int[] targetArray2)
{
List<int> resultList = new List<int>();
int firstIndex = 0;
int secondIndex = 0;
while (firstIndex < targetArray1.Length && secondIndex < targetArray2.Length)
{
if (targetArray1[firstIndex] < targetArray2[secondIndex])
{
resultList.Add(targetArray1[firstIndex]);
firstIndex++;
}
else if (targetArray1[firstIndex] == targetArray2[secondIndex])
{
resultList.Add(targetArray1[firstIndex]);
resultList.Add(targetArray2[secondIndex]);
firstIndex++;
secondIndex++;
}
else
{
resultList.Add(targetArray2[secondIndex]);
secondIndex++;
}
}
if (firstIndex >= targetArray1.Length && secondIndex < targetArray2.Length)
{
for (int i = secondIndex; i < targetArray2.Length; i++)
{
resultList.Add(targetArray2[i]);
}
}
else if (secondIndex >= targetArray2.Length && firstIndex < targetArray1.Length)
{
for (int i = firstIndex; i < targetArray1.Length; i++)
{
resultList.Add(targetArray1[i]);
}
}
Console.WriteLine("组合后的数组为:");
foreach (int item in resultList)
{
Console.Write(item + " ");
}
Console.WriteLine();
Console.WriteLine("测试成功!");
}
#endregion

#region 清除页面上所有textbox的值
/// <summary>
/// 判断是否为Textbox然后进行String.Empty操作
/// </summary>
///// <param name="control"></param>
//private void ClearData(Control control)
//{
// if (control is TextBox)
// {
// TextBox box = control as TextBox;
// box.Text = string.Empty;
// }
//}
/// <summary>
/// 递归寻找所有控件
/// </summary>
/// <param name="controls"></param>
//private void FindControlsAndClearData(ControlCollection controls)
//{
// foreach (Control cc in controls)
// {
// if (cc.HasControls())
// {
// FindControlsAndClearData(cc.Controls);
// }
// else
// {
// ClearData(cc);
// }
// }
//}
#endregion

#region Javascript 判断输入内容是否为数字
//$(document).ready(function() {
// var regx = /^/d+$/;
// $("#txtNumber").blur(function() {
// var txtboxValue = $("#txtNumber").get(0).value;
// if (txtboxValue != "") {
// if (!regx.test(txtboxValue)) {
// alert("您输入的不是数字!")
// }
// }
// });
//});
#endregion

#region DoublePlus
/// <summary>
/// 结果为0
/// </summary>
private static void DisplayDoubleValue()
{
double expectedValue = 1 / 2;
if (expectedValue > 0)
{
expectedValue = expectedValue + 0.5;
}
Console.WriteLine(expectedValue);
}
#endregion

/// <summary>
/// 显示每次排序后的当前数组情况
/// </summary>
/// <param name="targetArray"></param>
/// <param name="count"></param>
private static void PrintSortArray(int[] targetArray, int count)
{
Console.Write("第{0}次排序后:", count);
foreach (int item in targetArray)
{
Console.Write(item + " ");
}
Console.WriteLine();
}

/// <summary>
/// 显示当前数组
/// </summary>
/// <param name="targetArray"></param>
private static void PrintSortArray(int[] targetArray)
{
foreach (int item in targetArray)
{
Console.Write(item + " ");
}
Console.WriteLine();
}

/// <summary>
/// 显示当前List集合
/// </summary>
/// <param name="targetArray"></param>
private static void PrintSortArray(List<int> targetArray)
{
foreach (int item in targetArray)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
/// <summary>
/// 生成无序数列
/// </summary>
/// <param name="length"></param>
/// <returns></returns>
private static int[] GenerateRandomArray(int length)
{
Random ran = new Random();
int[] resultArray = new int[length];
List<int> tempList = new List<int>();
int index = 0;
for (int i = 0; i < length; i++)
{
resultArray[i] = i + 1;
}
for (int i = 0; i < resultArray.Length; i++)
{
index = ran.Next(length);
tempList.Add(resultArray[index]);
}
return tempList.ToArray();
}
/// <summary>
/// 反转数组元素
/// </summary>
/// <param name="targetArray"></param>
/// <returns></returns>
private static int[] ReverseTheArray(int[] targetArray)
{
List<int> resultList = new List<int>();
for (int i = targetArray.Length - 1; i >= 0; i--)
{
resultList.Add(targetArray[i]);
}
return resultList.ToArray();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: