当前位置: 首页 > news >正文

C#经典算法面试题

网络上收集的一些C#经典算法面试题,分享给大家

# 递归算法

## C#递归算法计算阶乘的方法

> 一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

原理:亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

/// <summary>/// C#递归算法计算阶乘的方法/// 一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。/// 亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。/// 最终输出结果:120/// </summary>public static void RecursiveFactorial(){int result = Factorial(5);Console.WriteLine("5的阶乘为:" + result);//5!=120}public static int Factorial(int n){if (n == 0 || n == 1){return 1;}else{// 递归调用:当前数n乘以前面所有数的阶乘return n * Factorial(n - 1);}}

 ## C#递归算法数组求

/// <summary>/// 递归算法数组求/// 最终输出结果为:259/// </summary>public static void RecursiveArraySum(){int[] numbers = { 1, 88, 66, 4, 100 };int sum = ArraySum(numbers, 0);Console.WriteLine("数组元素的总和为:" + sum);}/// <summary>/// 计算数组元素的总和/// </summary>/// <param name="arr">arr</param>/// <param name="index">index</param>/// <returns></returns>public static int ArraySum(int[] arr, int index){if (index >= arr.Length){// 基本情况:数组为空或者已经遍历完所有元素return 0;}else{// 递归调用:当前元素加上剩余元素的总和return arr[index] + ArraySum(arr, index + 1);}}

## C#使用递归算法来实现求解斐波纳契数列中第30位数的值

> 一列数的规则如下 : 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 34… 求第 30 位数是多少, 用递归算法实现。

/// <summary>/// 使用递归算法来实现求解斐波纳契数列中第30位数的值/// 一列数的规则如下 : 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 34… 求第 30 位数是多少, 用递归算法实现/// 最终输出结果为:832040/// </summary>public static void FibonacciSum(){int n = 30;int result = Fibonacci(n);Console.WriteLine("第 " + n + "位斐波那契数是:" + result);}public static int Fibonacci(int n){if (n <= 0){return 0;}else if (n > 0 && n <= 2){return 1;}else{// 递归情况:调用自身计算前两个数字之和return Fibonacci(n - 1) + Fibonacci(n - 2);}}

## 使用C#语言编写的递归算法来计算1+2+3+4+…+100的结果

/// <summary>/// 使用C#语言编写的递归算法来计算1+2+3+4+…+100的结果/// 最终输出结果是:5050/// </summary>public static void RecursiveAlgorithmSum(){int result = SumNumbers(100);Console.WriteLine("1+2+3+4+...+100 = " + result);}public static int SumNumbers(int n){if (n == 1){return 1;//递归结束条件}else{return n + SumNumbers(n - 1);}}

# C#常见排序算法

## 冒泡排序算法

### 双重循环方式实现冒泡排序

/// <summary>/// 双重循环方式实现冒泡排序/// </summary>public static void BubbleSort(){int[] arr = { 1, 8, 9, 5, 6, 2, 3, 4, 7 };int arrLength = arr.Length;for (int i = 0; i < arrLength - 1; i++){for (int j = 0; j < arrLength - i - 1; j++){if (arr[j] > arr[j + 1]){//交换arr[j]和arr[j+1]的值int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}Console.WriteLine("排序后结果:" + string.Join(", ", arr));}

 

 ### 递归方式实现冒泡排序

/// <summary>/// 递归方式实现冒泡排序/// </summary>/// <param name="arr">arr</param>/// <param name="arrLength">arrLength</param>public static void RecursiveBubbleSort(int[] arr, int arrLength){if (arrLength == 1)return;for (int i = 0; i < arrLength - 1; i++){if (arr[i] > arr[i + 1]){//交换arr[i]和arr[i+1]的值int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;}}RecursiveBubbleSort(arr, arrLength - 1);}public static void RecursiveBubbleSortRun(){int[] arr = { 1, 8, 9, 5, 6, 2, 3, 4, 7 };int arrLength = arr.Length;RecursiveBubbleSort(arr, arrLength);Console.WriteLine("排序后结果:" + string.Join(", ", arr));}

## 选择排序算法

> 选择排序是一种简单直观的排序算法,它的工作原理如下:

> 选择排序算法的核心思想是每次从未排序的部分中找到最小元素,然后将其与未排序部分的第一个元素交换位置。通过不断进行这个过程,逐步将最小元素放到正确的位置,完成整个数组的排序。

public class 选择排序算法{/// <summary>/// 选择排序算法/// 选择排序算法的核心思想是每次从未排序的部分中找到最小元素,然后将其与未排序部分的第一个元素交换位置。/// 通过不断进行这个过程,逐步将最小元素放到正确的位置,完成整个数组的排序。/// </summary>public static void SelectionSortAlgorithmMain(){int[] array = { 64, 25, 12, 22, 11 };Console.WriteLine("原始数组: ");PrintArray(array);SelectionSortAlgorithm(array);Console.WriteLine("排序后的数组: ");PrintArray(array);}static void SelectionSortAlgorithm(int[] arr){int n = arr.Length;for (int i = 0; i < n - 1; i++){// 在未排序部分中找到最小元素的索引int minIndex = i;for (int j = i + 1; j < n; j++){if (arr[j] < arr[minIndex]){minIndex = j;}}// 将最小元素与未排序部分的第一个元素交换位置int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}static void PrintArray(int[] arr){int n = arr.Length;for (int i = 0; i < n; ++i){Console.Write(arr[i] + " ");}Console.WriteLine();}}

 

# C#List集合相关

## C#List RemoveAt(按照索引移除)、Remove(按照对象移除)

/// <summary>/// 获取移除后的列表数据/// 考察内容:C#List RemoveAt(按照索引移除)、Remove(按照对象移除)/// </summary>/// <returns></returns>public static List<int> GetAfterRemoveListData(){List<int> list = new List<int>();for (int i = 1; i <= 10; i++){list.Add(i);}for (int i = 0; i < 5; i++){list.RemoveAt(i);//单独使用输出结果:2,4,6,8,10,按照索引移除list.Remove(i);//单独使用输出结果:5,6,7,8,9,10,按照对象移除}//以上两种同时使用时输出结果:6,7,9return list;}

 

# 其他算法

## 实现一个方法,对于输入的任意字符串,统计出其中每一种字符出现的次数

```C#

/** 字典的定义

 必须包含名空间System.Collection.Generic

 Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)

 键必须是唯一的,而值不需要唯一的

 键和值都可以是任何类型(比如:string, int, 自定义类型,等等)

 通过一个键读取一个值的时间是接近O(1)

 键值对之间的偏序可以不定义

*/

static void CountChar(string str)
{Dictionary<char, int> dic = new Dictionary<char, int>();foreach (char c in str){if (dic.ContainsKey(c))dic[c]++;elsedic.Add(c, 1);}foreach (KeyValuePair<char, int> p in dic){Console.WriteLine("字符{0},出现的次数{1}", p.Key.ToString(), p.Value.ToString());}
}

 ## 实现一个将字符串转换为整数的方法,不要使用int.Parse、int.TryParse、Convert.ToInt32等任何类库方法

public static bool TryParseToInt(string strData, out int num){if (string.IsNullOrWhiteSpace(strData)){num = 0;return false;}int result = 0;bool minus = strData[0] == '-' ? true : false;if (minus && strData.Length == 1){num = 0;return false;}for (int i = minus ? 1 : 0; i < strData.Length; i++){if (strData[i] >= '0' && strData[i] <= '9'){result = strData[i] - 48 + result * 10;}else{num = 0;return false;}}num = minus ? -result : result;return true;}static void Main(string[] args){//打印输出getValue为转化而成的整数var result = TryParseToInt("99", out int getValue);}

 ## 求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m

//通过顺序规律写程序,同时也知道flag标志位的重要性static int F1(int m)  {  int sum =0;  bool flag =true;  for (int i = 1; i <= m; i++)  {  if (flag)  //一次是默认是True,下下也为True  sum += i;  else  sum -= i;  flag = !flag;  }  return sum;  }  //通过奇偶性  static int F2(int m)  {  int sum = 0;  for (int i = 1; i <= m; i++)  {  if (i % 2 >0)  //即为奇数  sum += i;  else  sum -= i;  }  return sum;  }  

 ## 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

class Program  {  static void Main(string[] args)  {  //有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?  //分解题目  //条件:四个数字1、2、3、4  ;三位数:百位、十位、个位  //要求:互不相同;无重复数字:每个数字在三位中只出现一次  //结果:多少个? 都是多少?  int count = 0; //统计个数  for (int bw = 1; bw <= 4; bw++)  {  for (int sw = 1; sw <= 4; sw++)  {  if (sw!= bw)  //很显然,只有百位和十位不同的情况下才能谈个位。  {  for (int gw = 1; gw <= 4; gw++)  {  if (gw != sw && gw != bw)   //百位用过的,十位就不能用;百位和十位都用过的,个位就不能用  {  count++;  Console.WriteLine("{0}{1}{2}", bw, sw, gw);  }  }  }  }  }  Console.WriteLine("一共有{0}个", count);  Console.Read();  }  }   

 

## 一个6位数乘以一个3位数,得到一个结果。但不清楚6位数的两个数字是什么,而且结果中有一位数字也不清楚,请编程找出问好代表的数字,答案可能有多个。

> 表达式:12?56?*123 = 154?4987

for (int a = 0; a < 10; a++)  {  for (int b = 0; b < 10; b++)  {  for (int c = 0; c < 10; c++)  {  if ((120560 + a + b * 1000) * 123 == 15404987 + c * 10000)  {  Console.WriteLine(a);  Console.WriteLine(b);  Console.WriteLine(c);  }  }  }  }  Console.Read();  

 ## 有一个字符串 "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 - 1; i >= 0; i--)  {  res += arr[i];  if (i > 0)  res += " ";  }  return res;  }  

 ## C# 九九乘法表算法实现

static void Mu()  {  string t = string.Empty;  for (int i = 1; i < 10; i++)  {  for (int j = 1; j <= i; j++)  {  t = string.Format("{0}*{1}={2} ", j, i, (j * i));  Console.Write(t);  //if (j * i < 82)  //    Console.Write(" ");  if (i == j)  Console.Write("\n");  }  }  }  

 

## 在1~10000的整数中,找出同时符合以下条件的数:a.必须是质数。b.该数字各位数字之和为偶数,如数字12345,各位数字之和为1+2+3+4+5=15,不是偶数。

> 本题考了两个地方:

> (1)、质数的理解:质数就是所有比1大的整数中,除了1和它本身外,不再有别的约数。2是一个不是奇数的质数,它既是质数也是偶数,面试者极容易忽略这点。判断数N是否为质数要直接从3开始判断(如果N不是2),首先不能是偶数,然后再判断是否能被3、5、7....整除,直到sqrt(N)止。

> (2)、求各位数字之和,可以通过循环取余的办法。

using System;  using System.Collections.Generic;  class program  {  static void Mian(string[] args)  {  int N =1000;  List<int> primes = new List<int>();  primes.Add(2);  Console.Write(2+" ");  for(int i=3;i<N,i+=2)  {  if(!)  }  }  static bool IsDigitSumEven(int n)  {  int sum=0;  while(n>0)  {  sum +=n% 10;  n /=10;  }  return sum%2==0;  }  }  

 

相关文章:

C#经典算法面试题

网络上收集的一些C#经典算法面试题&#xff0c;分享给大家 # 递归算法 ## C#递归算法计算阶乘的方法 > 一个正整数的阶乘&#xff08;factorial&#xff09;是所有小于及等于该数的正整数的积&#xff0c;并且0的阶乘为1。自然数n的阶乘写作n!。1808年&#xff0c;基斯顿…...

vulnhub靶场【DriftingBlues】之9 final

前言 靶机&#xff1a;DriftingBlues-6&#xff0c;IP地址192.168.1.66 攻击&#xff1a;kali&#xff0c;IP地址192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24 信息收集 使用nmap扫描端口 网站探测 访…...

有124个叶子节点的,完全二叉树最多有多少个节点

n&#xff1d;n0n1n2 其中n0为叶子节点&#xff0c; n2&#xff1d;n0-1 完全二叉树的定义和性质 最后化简&#xff0c;n&#xff1d;2*n0n1-1...

从RNN到Transformer:生成式AI自回归模型的全面剖析

个人主页&#xff1a;chian-ocean 文章专栏 生成式AI中的自回归模型详解 在生成式AI的飞速发展中&#xff0c;自回归模型作为核心技术之一&#xff0c;成为文本生成、语音合成、图像生成等领域的重要支柱。本文将全面探讨自回归模型的原理、架构、实际应用&#xff0c;并结合…...

Java爬虫大冒险:如何征服1688商品搜索之巅

在这个信息爆炸的时代&#xff0c;数据就是力量。对于电商平台而言&#xff0c;数据更是金矿。今天&#xff0c;我们要踏上一场Java爬虫的冒险之旅&#xff0c;目标是征服1688这个B2B电商巨头&#xff0c;获取按关键字搜索的商品信息。这不仅是技术的挑战&#xff0c;更是智慧的…...

基于Spring Boot的无可购物网站系统

一、系统背景与意义 随着互联网的快速发展&#xff0c;电子商务已经成为人们日常生活的重要组成部分。构建一个稳定、高效、可扩展的电商平台后端系统&#xff0c;对于满足用户需求、提升用户体验、推动业务发展具有重要意义。Spring Boot作为当前流行的Java开发框架&#xff…...

智能人家谱程序创意

实现一个家谱程序&#xff0c;并结合自传、视频、图片资料和智能对话系统&#xff0c;涉及到多个领域的技术&#xff1a;自然语言处理&#xff08;NLP&#xff09;、机器学习、计算机视觉、多媒体处理和数据存储。下面&#xff0c;我为你制定一个可执行的计划&#xff0c;详细阐…...

Redis 7.x哨兵模式如何实现?基于Spring Boot 3.x版

大家好&#xff0c;我是袁庭新。 在Redis主从复制模式中&#xff0c;因为系统不具备自动恢复的功能&#xff0c;所以当主服务器&#xff08;master&#xff09;宕机后&#xff0c;需要手动把一台从服务器&#xff08;slave&#xff09;切换为主服务器。在这个过程中&#xff0…...

解决QTCreator在Debug时无法显示std::string类型的问题

环境&#xff1a; 操作系统&#xff1a;Ubuntu 20.04.6 LTS QT版本&#xff1a;Qt Creator 4.11.0 问题&#xff1a; Debug时&#xff0c;无法显示std::string类型的值&#xff0c;如下图&#xff1a; 解决方法&#xff1a; 修改/usr/share/qtcreator/debugger/stdtypes.py…...

leetcode 面试经典 150 题:无重复字符的最长子串

链接无重复字符的最长子串题序号3类型字符串解题方法滑动窗口难度中等 题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 …...

0101多级nginx代理websocket配置-nginx-web服务器

1. 前言 项目一些信息需要通过站内信主动推动给用户&#xff0c;使用websocket。web服务器选用nginx&#xff0c;但是域名是以前通过阿里云申请的&#xff0c;解析ip也是阿里云的服务器&#xff0c;甲方不希望更换域名。新的系统需要部署在内网服务器&#xff0c;简单拓扑图如…...

【前端】Jquery拍照,通过PHP将base64编码数据转换成PNG格式,并保存图像到本地

目录 一、需求 二、开发语言 三、效果 四、业务逻辑&#xff1a; 五、web端调用摄像头 六、示例代码 1、前端 2、后端 一、需求 web端使用jquery调用摄像头拍照&#xff0c;并使用PHP把base64编码转换成png格式图片&#xff0c;下载到本地。 由于js不能指定图片存储的…...

websocket再项目中的使用

WebSocket在项目中的使用‌主要包括以下几个方面&#xff1a; ‌WebSocket的基本概念和原理‌&#xff1a; ‌定义‌&#xff1a;WebSocket是一种基于TCP的协议&#xff0c;实现了浏览器与服务器之间的全双工通信。它通过HTTP/1.1协议的101状态码进行握手&#xff0c;建立连接‌…...

ajax同步执行async:false无效的解决方法

无效的情况&#xff1a; function ManHourCheck() {var StartDate $("#StartDate").val();//日报日期var EndDate $("#EndDate").val();//完成日期var UserID $("#UserID").val();//员工ID$.ajax({async: false,//加了这一行也没用!!!!!!!!!!…...

基于Qt的登陆界面设计

目标 自由发挥登录界面的应用场景&#xff0c;实现一个登录窗口的界面。 要求&#xff1a;每行代码都要有注释 代码 // 设置窗口大小为600x400像素 this->resize(600,400); // 设置窗口标题为"TheWitcher 巫师3&#xff1a;狂猎" this->setWindowTitle(&qu…...

HarmonyOS 输入框组件:TextInput 和 TextArea 深度解析

输入框组件是移动端开发中最常见的组件之一&#xff0c;常用于响应用户的输入操作&#xff0c;比如评论区的文本输入、聊天框的消息输入、表单内容填写等场景。在 HarmonyOS 中&#xff0c;TextInput 和 TextArea 分别用于单行和多行输入操作。除此之外&#xff0c;它们还可以与…...

【Golang】 Go 语言中的 Struct、JSON 和 Map 互转:详细指南

Go 语言中的 Struct、JSON 和 Map 互转:详细指南 在 Go 语言中,处理 JSON 数据、结构体类型和映射(map)是与 API、配置或数据库交互时非常常见的任务。理解如何在这些数据类型之间无缝转换对于高效的 Go 编程至关重要。以下是如何将 Go 结构体转换为 JSON、将 JSON 转换为…...

Azure Function流式返回

最近用azure function做了一个api和llm交互&#xff0c;需要流式返回。但是默认不支持流返回&#xff0c;搜索了一下。记录。 官方文档&#xff1a;https://techcommunity.microsoft.com/blog/azurecompute/azure-functions-support-for-http-streams-in-python-is-now-in-prev…...

智能座舱进阶-应用框架层-Jetpack主要组件

Jetpack的分类 1. DataBinding&#xff1a;以声明方式将可观察数据绑定到界面元素&#xff0c;通常和ViewModel配合使用。 2. Lifecycle&#xff1a;用于管理Activity和Fragment的生命周期&#xff0c;可帮助开发者生成更易于维护的轻量级代码。 3. LiveData: 在底层数据库更…...

GitLab分支管理策略和最佳实践

分支管理是 Git 和 GitLab 中非常重要的部分&#xff0c;合理的分支管理可以帮助团队更高效地协作和开发。以下是一些细化的分支管理策略和最佳实践&#xff1a; 1. 分支命名规范 • 主分支&#xff1a;通常命名为 main 或 master&#xff0c;用于存放稳定版本的代码。 • …...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...