C#的常见算法(面试)
一、求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
//方法一,通过顺序规律写程序,同时也知道flag标志位的重要性。
static int F1(int m)
{
int sum =;
bool flag =true;
for (int i = ; i <= m; i++)
{
if (flag) //一次是默认是True,下下也为True
sum += i;
else
sum -= i;
flag = !flag; }
return sum;
} //通过奇偶性
static int F2(int m)
{
int sum = ;
for (int i = ; i <= m; i++)
{
if (i % >) //即为奇数
sum += i;
else
sum -= i;
}
return sum;
}
二,有一个字符串 "I am a good man",设计一个函数,返回 "man good a am I"。
static string Reverse()
{
string s = "I am a good man";
string[] arr = s.Split(' ');
string res = "";
for (int i = arr.Length - ; i >= ; i--)
{
res += arr[i];
if (i > )
res += " ";
}
return res;
}
三.冒泡排序
namespace BubbleSorter
{
class BubbleSorter
{
private static int[] myArray;
private static int arraySize;
public static void Sort(int[] a)
{
myArray = a;
arraySize = myArray.Length;
BubbleSort(myArray);
} public static void BubbleSort(int[] myArray)
{
for (int i = ; i < myArray.Length-; i++) //由于数组的特点,从0开始,但myArray的长度为5,所以需要减1,实际进行了(0~3)4趟循环
{
for (int j =; j < myArray.Length -- i; j++) //内层循环的要点是相邻比较。当j=4的时候,就推出循环了
{
if (myArray[j] > myArray[j + ])
{
Swap(ref myArray[j], ref myArray[j + ]);
}
}
}
} private static void Swap(ref int left, ref int right)
{
int temp;
temp = left;
left = right;
right = temp;
} static void Main(string[] args)
{
int[] a = { , , , , };
BubbleSorter.Sort(a);
foreach (int i in a)
{
Console.WriteLine(i);
}
Console.Read();
}
}
}
四.选择排序
选择排序是一种简单直观的排序算法。它的工作原理如下。
首先在未排序列中找到最小的元素,存放到排序序列的起始位置。然后,在从剩余未排序元素中继续寻找最小的元素,放到排序序列末尾。以此类推,直到所有元素均排序完毕。
class SelectSorter
{
private static int[] myArray;
private static int arraySize;
public static void Sort(int[] a)
{
myArray = a;
arraySize = myArray.Length;
SelectSort(myArray);
}
public static void SelectSort(int[] myArray)
{
int i, j, smallest;
for(i=;i<myArray.Length-;i++) //数据起始位置,从0到倒数第二个数据
{
smallest = i; //记录最小数的下标
for (j = i + ; j < myArray.Length; j++) //在剩下的数据中寻找最小数
{
if (myArray[j] < myArray[smallest]) {
smallest = j; //如果有比它更小的,记录下标
}
}
Swap(ref myArray[i], ref myArray[smallest]); //将最小数据和未排序的第一个数交换
}
} private static void Swap(ref int left, ref int right)
{
int temp;
temp = left;
left = right;
right = temp;
} static void Main(string[] args)
{
int[] a = new int[] { , , , , };
SelectSorter.Sort(a);
for (int i = ; i < a.Length; i++)
{
System.Console.WriteLine(a[i]);
}
System.Console.Read();
}
}
五.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
class Program
{
static void Main(string[] args)
{ //有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
//分解题目
//条件:四个数字1、2、3、4 ;三位数:百位、十位、个位
//要求:互不相同;无重复数字:每个数字在三位中只出现一次
//结果:多少个? 都是多少? int count = ; //统计个数
for (int bw = ; bw <= ; bw++)
{
for (int sw = ; sw <= ; sw++)
{
if (sw!= bw) //很显然,只有百位和十位不同的情况下才能谈个位。
{
for (int gw = ; gw <= ; gw++)
{
if (gw != sw && gw != bw) //百位用过的,十位就不能用;百位和十位都用过的,个位就不能用
{
count++;
Console.WriteLine("{0}{1}{2}", bw, sw, gw);
}
}
}
}
}
Console.WriteLine("一共有{0}个", count);
Console.Read(); }
}
选择排序方法2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 选择排序
{
//选择排序与冒泡排序比较的次数是一样的
//选择排序的交换次数要比冒泡排序的交换次数少 class Program
{
static void Main(string[] args)
{
int[] arr = { , , , , , , , }; //待排序数组
SelectSort(arr); //调用选择排序函数
} private static void SelectSort(int[] arr)
{
int temp = ;
for (int i = ; i < arr.Length - ; i++)
{
int minVal = arr[i]; //假设 i 下标就是最小的数
int minIndex = i; //记录我认为最小的数的下标 for (int j = i + ; j < arr.Length; j++) //这里只是找出这一趟最小的数值并记录下它的下标
{
//说明我们认为的最小值,不是最小
if (minVal > arr[j]) //这里大于号是升序(大于是找出最小值) 小于是降序(小于是找出最大值)
{
minVal = arr[j]; //更新这趟最小(或最大)的值 (上面要拿这个数来跟后面的数继续做比较)
minIndex = j; //记下它的下标
}
}
//最后把最小的数与第一的位置交换
temp = arr[i]; //把第一个原先认为是最小值的数,临时保存起来
arr[i] = arr[minIndex]; //把最终我们找到的最小值赋给这一趟的比较的第一个位置
arr[minIndex] = temp; //把原先保存好临时数值放回这个数组的空地方, 保证数组的完整性
}
//控制台输出
foreach (int item in arr)
{
Console.WriteLine("C#遍历:{0}", item);
}
}
}
}
C#的常见算法(面试)的更多相关文章
- PHP常见算法-面试篇(2)
1.顺序查找 思路分析: 从数组的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功:如果到最后一个元素仍没有目标元素,则查找失败. 代码实现: <?php function se ...
- PHP常见算法-面试篇(1)
1.冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将 ...
- 数据结构+算法面试100题~~~摘自CSDN
数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...
- 字符串匹配常见算法(BF,RK,KMP,BM,Sunday)
今日了解了一下字符串匹配的各种方法. 并对sundaysearch算法实现并且单元. 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目.此算法通常输入为原字符串(strin ...
- 常见算法(logistic回归,随机森林,GBDT和xgboost)
常见算法(logistic回归,随机森林,GBDT和xgboost) 9.25r早上面网易数据挖掘工程师岗位,第一次面数据挖掘的岗位,只想着能够去多准备一些,体验面这个岗位的感觉,虽然最好心有不甘告终 ...
- 常见算法合集[java源码+持续更新中...]
一.引子 本文搜集从各种资源上搜集高频面试算法,慢慢填充...每个算法都亲测可运行,原理有注释.Talk is cheap,show me the code! 走你~ 二.常见算法 2.1 判断单向链 ...
- Java && Python 算法面试常用类以及方法总结
数据结构 逻辑结构上: 包括集合,线性结构,非线性结构. 存储结构: 顺序存储,链式存储,索引存储,散列存储. Java 常见数据结构 大专栏 Java && Python 算法面试 ...
- C++常见的面试题目整理
本文列出C++面试中经常遇到的一些问题,都是一些常见的面试考点,如果后续遇到其他常见面试问题还会再次更新.希望对近期参加面试的同学有一些帮助.先后顺序与问题的重要性无关,查看的时候,最好是全面了解一下 ...
- C++常见笔试面试要点以及常见问题
1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...
- Hadoop学习笔记—12.MapReduce中的常见算法
一.MapReduce中有哪些常见算法 (1)经典之王:单词计数 这个是MapReduce的经典案例,经典的不能再经典了! (2)数据去重 "数据去重"主要是为了掌握和利用并行化思 ...
随机推荐
- Spring security csrf实现前端纯html+ajax
spring security集成csrf进行post等请求时,为了防止csrf攻击,需要获取token才能访问 因此需要添加 <input type="hidden" na ...
- C#核心语法讲解-泛型(详细讲解泛型方法、泛型类、泛型接口、泛型约束,了解协变逆变)
泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...
- JDBC第二篇--【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 1.PreparedStatement对象 PreparedState ...
- 支持语音识别、自然语言理解的微信小程序(“遥知之”智能小秘)完整源码分享
记录自己搭建https的silk录音文件语音识别服务的调用过程,所有代码可在文中找链接打包下载 >>>>>>>>>>>>> ...
- 关于搭建php电商环境时缺少fileinfo、数据库安装出错问题解决办法
今天以WSTMart电商系统为例讲解 搭建php电商环境缺少fileinfo.数据库安装出错问题找了很多方法都没能很好解决,该方法简单明了,容易操作 首先需要到开源中国中下载该系统源码,网址为:htt ...
- 嵌入式Llinux学习路线图
版本 日期 作者 说明 V1 2016.07.29 韦东山 第1版本,Android部分未写 我是1999年上的大学,物理专业.在大一时,我们班里普遍弥漫着对未来的不安,不知道学习了物理后出去能做什么 ...
- 开天辟地-用visualstudio2010编写helloworld
安装好visual之后,创建新项目 向源文件添加helloworld.cpp 编写helloworld代码,编译运行即可 在运行时候出现一个错误,错误和解决方法如下:
- 树状数组初步_ZERO
原博客:树状数组 1 一维树状数组 1 什么是树状数组 树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组A[1..n],那么查询A[1]+-+A[n]的时,间是log级 ...
- Java笔记—— 类与对象的几个例子
问题1 按要求编写java应用程序: 编写西游记人物类,属性有:身高,名字和武器.方法有:显示名字,显示武器. 在main方法中创建两个对象.猪八戒和孙悟空,并分别为他们的两个属性名字和武器赋值,最后 ...
- TomCat系统架构
1.TomCat总体结构 TomCat有两大核心组件:Connector和Container.Connector组件是可以被替换的,一个Container可以对应多个Connector. 多个Conn ...