C# 基础编程题集锦

Posted BoiledYakult

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 基础编程题集锦相关的知识,希望对你有一定的参考价值。

C# 基础知识 编程题 集锦

简单字符串加密

编写一个应用程序用来输入的字符串进行加密,对于字母字符串加密规则如下:
\'a→d’ ‘b\'→’e’ ‘w’→z\' ...... x\'→’a’ ‘y\'→b\' ‘z→c’ ‘A’→’D’ ‘B\'→’E’ ‘W’→’Z’ ‘X’→’A’ ‘Y’→’B’ ‘Z’→’C’ ?对于其他字符,不进行加密。

 static void Main(string[] args)
 
     string str = Console.ReadLine();
     Char[] chars = str.ToCharArray();
     for (int i = 0; i < chars.Length; i++)
     
         if ((chars[i] >= \'a\' && chars[i] <= \'z\') || (chars[i] >= \'A\' && chars[i] <= \'Z\'))
         
             chars[i] = (char)(chars[i] + 3);
             if ((chars[i] > \'z\' && chars[i] <= \'z\' + 3)||(chars[i] > \'Z\' && chars[i] <= \'Z\' + 3))
             
                 chars[i] = (char)(chars[i] -26);
             
         
     
     foreach (char c in chars)
     
         Console.Write(c);
     
     Console.ReadKey();
 

找到最小值

输入(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。

【假设输入的数字以空格字符隔开,例:23 15 45 78 】

  static void Main(string[] args)
        
            string str = Console.ReadLine();
            string[] strArray = str.Split(\' \');
            int[] intArray = new int[strArray.Length];
            for (int i = 0; i < intArray.Length; i++)
            
                intArray[i] = int.Parse(strArray[i]);
            
            int min = intArray[0];
            int minIndex = 0;
            for (int i = 1; i < intArray.Length; i++)
            
                if (intArray[i] < min)
                
                    min = intArray[i];
                    minIndex = i;
                
            
            intArray[minIndex] = intArray[0];
            intArray[0] = min;
            foreach (var item in intArray)
            
                Console.Write(item + " ");
            
            Console.ReadKey();
        

在适当位置插入

有 n (n<=100) 个整数,已经按照从小到大顺序排列好,现在另外给一个整数 x ,请将该数插入到序列
中,并使新的序列仍然有序。

 static void Main(string[] args)
        
            int[] array =  2, 3, 5, 10, 89 ;
            int target = int.Parse(Console.ReadLine());
            int index = 0;
            bool isFound = false;
            for (int i = 0; i < array.Length - 1; i++)
            
                if (target >= array[i] && target <= array[i + 1])
                
                    index = i;
                    isFound = true;
                    break;
                
            
            List<int> list = array.ToList();
            if (isFound)
            
                list.Insert(index + 1, target);
            
            else
            
                if (target < list[0])
                
                    list.Insert(0, target);
                
                else
                
                    list.Add(target);
                
            
            array = list.ToArray();
            for (int i = 0; i < array.Length; i++)
            
                Console.Write(array[i] + " ");
            
            Console.ReadKey();
        

排序

编写一个控制台程序,要求用户输入一组数字用空格间隔,对用户输入的数字从小到大输出。
(Array.Sort()方法和冒泡排序)

Array.Sort

static void Main(string[] args)
        
            string[] strArray = Console.ReadLine().Split(\' \');
            int[] intArray = new int[strArray.Length];
            for (int i = 0; i < intArray.Length; i++)
            
                intArray[i] = int.Parse(strArray[i]);
            
            Array.Sort(intArray);
            for (int i = 0;i < intArray.Length; i++)
            
                Console.Write(intArray[i]+" ");
            
            Console.ReadKey();
        

冒泡排序

static void Main(string[] args)
        
            string[] strArray = Console.ReadLine().Split(\' \');
            int[] intArray = new int[strArray.Length];
            for (int i = 0; i < intArray.Length; i++)
            
                intArray[i] = int.Parse(strArray[i]);
            
            for (int i = 0; i < intArray.Length-1; i++)
            
                for (int y = 0; y < intArray.Length-1; y++)
                
                    if (intArray[y] > intArray[y+1])
                    
                        int temp = intArray[y];
                        intArray[y]= intArray[y+1];
                        intArray[y+1]= temp;
                    
                
            
            foreach (var item in intArray)
            
                Console.Write(item+" ");
            
            Console.ReadKey();
        

判断合法标识符

输入一个字符串,判断其是否是C#合法标识符。

【合法标识符即合法命名】 - 字母、数字、下划线

static void Main(string[] args)
        
            char[] chars = Console.ReadLine().ToCharArray();
            bool isLeagal = true;
            if ((chars[0] >= \'0\' && chars[0] <= \'9\'))
            
                isLeagal = false;
            
            else
            
                foreach (char c in chars)
                
                    if (!((c>=\'0\'&&c<=\'9\')||(c>=\'a\'&&c<=\'z\')||(c>=\'A\'&&c<=\'Z\')||c==\'_\'))
                    
                        isLeagal=false;
                        break;
                    
                
                
            
            if (isLeagal)
            
                Console.WriteLine("字符串合法");
            
            else  Console.WriteLine("字符串不合法"); 
            Console.ReadKey();
        

回文串

回文串"是一个正读和反读都一样的字符串,比如level或者noon等等就是回文串。请写一个
程序判断读入的字符串是否是“回文串”。

 static void Main(string[] args)
        
            char[] chars = Console.ReadLine().ToCharArray();
            bool isHui = true;
            for (int i = 0; i < chars.Length / 2; i++)
            
                if (chars[i] != chars[chars.Length - 1 - i])
                
                    isHui = false;
                    break;
                
            
            if (isHui)
            

                Console.WriteLine("是回文串");
            
            else
            
                Console.WriteLine("不是回文串");
            

            Console.ReadKey();
        

判断第二大值

输入是个不相等的正整数,输出这10个正整数中的第二大的数。
样例输入
3729531038
样例输出
9

static void Main(string[] args)
        
            string[] strArray = Console.ReadLine().Split(\' \');
            int[] intArray = new int[strArray.Length];
            for (int i = 0; i < intArray.Length; i++)
            
                intArray[i] = int.Parse(strArray[i]);
            
            int max1 = 0, max2 = 0;
            for (int i = 0; i < intArray.Length; i++)
            
                if (intArray[i]>max1)
                
                    max2 = max1;
                    max1 = intArray[i];
                
                else
                
                    if (intArray[i]>max2)
                    
                        max2 = intArray[i];
                    
                
            
            Console.WriteLine($"第二大值 max2");
            Console.ReadKey();
        

真素数

区间内的真素数
找出正整数M和N之间(N不小于M)的所有真素数。

真素数的定义:如果一个正整数P为素数,且其反序也为素数,那么P就为真素数。

例如,11,13均为真素数,因为11的反序还是为14,13的反序为31也为素数。

输入格式:输入两个数M和N,空格间隔,1<=M<=N<=100000。

输出格式:按从小到大输出M和N之间(包括M和N)的真素数,逗号间隔。如果之间没有真素数,则输出N0。

输入样例:1035

输出样例:11.13,17,31

 static void Main(string[] args)
        
            string[] strArray = Console.ReadLine().Split(\' \');
            int[] intArray = new int[strArray.Length];
            for (int i = 0; i < intArray.Length; i++)   // m n
            
                intArray[i] = int.Parse(strArray[i]);
            
            int m = intArray[0];
            int n = intArray[1];
            for (int i = m; i < n + 1; i++)
            
                bool isSu = true;
                for (int j = 2; j < i; j++)
                
                    if (i % j == 0)
                    
                        isSu = false;
                    
                
                if (isSu)
                
                    // 取反
                    int temp = i;
                    int number = 0;
                    while (temp % 10 != 0)
                    
                        number = number * 10 + temp % 10;
                        temp = temp / 10;
                    
                    bool isSu2 = true;
                    for (int j = 2; j < number; j++)
                    
                        if (number % j == 0)
                        
                            isSu2 = false;
                            break;
                        
                    
                    if (isSu2)
                    
                        Console.Write(i + " ");
                    
                
            
            Console.ReadKey();
        

递归函数类

f( n )=f(n-1)+ f(n-2) ,f(0)=2 ,f(1) = 3 , 用程序求得 f(40)

循环

 static void Main(string[] args)
        
            // fn = fn1 + fn2 f0=2 f1=3
            int n1 = 2; // f0
            int n2 = 3; // f1
            int n40 = 0;
            for (int i = 2; i < 41; i++)
            
                n40 = n1 + n2;
                n1 = n2;
                n2 = n40;
            
            Console.WriteLine(n40);
            Console.ReadKey();
        

递归函数

 static void Main(string[] args)
        
            // fn = fn1 + fn2 f0=2 f1=3
            int n40 = F(40);
            Console.WriteLine(n40);
            Console.ReadKey();
        
        static int F(int n)
        
            if (n == 0)  return 2; 
            if (n == 1)  return 3; 
            int res = F(n - 1) + F(n - 2);
            return res;
        

阶乘

利用递归函数取得10!

循环

 static void Main(string[] args)
        
            // n! = n*(n-1)*(n-2)*...*(n-(n-1))
            // 5! = 5*4*3*2*1
            int result = 10;
            for (int i = 9; i > 0; i--)
            
                result = result * i;
            
            Console.WriteLine(result);
            Console.ReadKey();
        

递归函数

static void Main(string[] args)
        
            // n! = n*(n-1)*(n-2)*...*(n-(n-1)) = n*(n-1)!
            // 5! = 5*4*3*2*1
            Console.WriteLine(F(10));
            Console.ReadKey();
        
        static int F(int n)
        
            if (n == 1)  return 1; 
            int res = n * F(n - 1);
            return res;
        

找规律!!!

阶乘变种

1+2!+3!+4!+..+10!

利用多个方法计算结果

 static void Main(string[] args)
        
            // n! = n*(n-1)*(n-2)*...*(n-(n-1)) = n*(n-1)!
            // 5! = 5*4*3*2*1
            Console.WriteLine(S(10));
            Console.ReadKey();
        
        static int F(int n)
        
            if (n == 1)  return 1; 
            int res = n * F(n - 1);
            return res;
        
        static int S(int n)
        
            if(n==1)  return 1; 
            int res=F(n) + S(n - 1);
            return res;
        

递归练习

有关系式1 x 1+2 x 2+3 x 3+..+ k x k<2000,编一个程序,求出满足此关系式的k的最大值

利用递归和循环解决这个问题

static void Main(string[] args)
        
            // 不清楚循环何时结束 - while
            int k = 1;
            while (true)
            
                int res = F(k);
                if (res >= 2000)
                
                    break;
                
                k++;
            
            Console.WriteLine(k - 1);
            Console.ReadKey();
        
        static int F(int n)
        
            if (n == 1)  return 1; 
            int res = n * n + F(n - 1);
            return res;
        

Android面试题基础集锦总结《二》

Android面试题基础集锦总结《二》

1、面试步骤

主要包括六个部分 面试准备 简历投递时间 面试技巧 面试真题集锦 面试总结 面试推荐学习资料

2、面试准备

2.1. 简历设计

2.1.1 首先一份合格简历 我认为应该至少包括以下五个部分

2.1.2 个人信息
姓名 性别 专业
毕业学校尤其是985或者211可以重点学校可以提下** 也是面试一个加分项

2.1.3 面试岗位 比如Android app应用工程师 Android驱动工程师 Android系统工程师 等等 岗位目标一定要明确 不然面试官也不知道你到底要面啥岗位(当然投递的时候也要注意)

2.1.4 岗位职责技术要点 说白了就是你在这家公司负责项目 做了那些功能 然后这些功能给公司带来了那些绩效 比如公司业绩翻了多少个点 尽量用数字描述出来,另外项目中遇到那些问题 自己是怎么解决这个也是面试中一个加分项 如果项目有些技术难点不是你自己你一定要熟悉代码 否则不要写上去 ,否则一定是减分项切记哈 简历可以包装但是不能包装太过 描述一定要简洁明了!

2.1.5 技能产出

这里注意包括以下几个方面作为参考
1、就是你的这些年技术积累比如自定义view能够做到什么程度
2、比如搞物联网熟悉什么通讯 比如TCP/IP通讯 MQTT协议等等
3、做过哪些性能优化 比如直播出图优化到多少1-2秒秒开
4、在github或者其他社区开源共享 有多少star这些都是你的技术积累 同样也是加分项
5、架构设计方面一些思想等等

2.1.6 个人博客

这些相当于也是一个加分项 让面试官觉得你还是有一些技术沉淀积累

3、简历投递时间

个人建议周一上午开始投递 切记不要在周五时候投递 因为很多公司周五有很多会议 可能一周最忙的时候 当然这个也是仅供参考

4、面试技巧

4.1电话面试

4.1.1
电话面试首先要找个好点网络 不然面试出现断断续续很影响面试体验 另外选一个比较安静一点环境卧室或者会议室等等 面试的时候一定要声音大 ,自我介绍的时候主要讲自己做过哪些项目以及与岗位匹配度 一般3-5分钟就够了,如果听声音面试关不耐烦 就不要再讲了,切记一定不要以自我为中心,面试本来就是一个自我推销的过程,我们一定要想清楚一个事情,为什么那么多面试者我会选您?
4.1.2
学会设计面试环节 言外之意就是要将你自己的优势体现出来 如果面试官一直问的问题不是你想要的那也没事 你可以提示面试官我可能对哪一方面熟悉一点 尽量引导面试官讲你擅长的部分 这样拿offer概率就相对其他竞争者大一点
4.1.3
学会尊重面试官 比如面试要有一些礼貌用语 比如请问 就算遇到子一些不会题目也不要紧急 可以谦虚一点问下面试官 大多数面试官还是会愿意给你讲解的 不管面试成功还是失败对你而言都是一种收获

4.2视频面试

4.2.1 视频面试相对于电话面试更正式一点像大多数公司还是使用腾讯会议或者钉钉这种方式 提前给面试者发一个会议号 然后面试者将对应的会议号添加即可
4.2.2
视频面试需要注意 自己声音以及眼神一定要注视面试官 说话的时候不要把头偏向另外一边 切记不要动来动去 给人感觉很不好,注意力一定要集中 如果有问题没听清楚可以请面试官再讲一遍
4.2.3
如果面试中遇到自己不熟悉题目或者面试官自己想了一个项目问你的思路的时候 这时候千万不要紧张 就算你啥都不知道 你可以想下之前项目中有没有类似或者相同点技术 然后可以分成1 2 3 这种点让别人觉得你更有逻辑性 就算回答不好也没关系 一般来说这种题目加分项 一定要思考,不要就是回答我不知道 面试官这时候主要考虑你平时应对一些问题能力以及考察遇到新的问题怎么去解决
4.2.4
可以尝试录音 面试结束可以反复听下 看下自己是哪里没有说好 这样为后面面试作为准备 尽量减少失误 就算一场面试失败 也没事 调整好心态 有时候与面试官以及自己准备有关 尽可能将一些专业知识储备建成一个体系 比如通过思维导图这种方式 方便自己复习 千万不要啥都不准备去面试这样相当于浪费一次机会也是对自己跟面试官的不尊重

4.3现场面试

4.3.1
首先面试前一天一定要了解公司信息 以及岗位职责需要的技术,以及公司目前做的产品与自己一个匹配度
4.3.2
提前打印一份简历或者跟面试公司HR帮你打印 一定要有针对性去针对岗位做简历 而不是每个公司都是一样简历 比如有些公司做蓝牙BLE然后你的简历上面没有蓝牙开发经验也没关系。
4.3.3
如果有笔试提前将一些专业八股文知识背好 一般不会太难 面试官主要用来筛选一些简历 但是有些大公司要求比较高如果是面试算法 这个肯定要去LeetCode或者剑指offer上面刷题 比如排序算法 树与二叉数 链表 二分查找
4.3.4
现场面试由于面对面交流 态度问题也很重要 跟视频面试一样 一定要注意面试官眼神 不要东张西望 有时候面试就态度+运气+专业度 之前也有人反馈过 面试整体过程不好 但是由于自己态度让面试官感觉很好 后面还是通过了。面试看的一个综合能力 当然技术肯定是优先 但是如果态度好肯定锦上添花

5、面试真题集锦

5.1 Java

5.1.1
java内存模式(方法区 堆区 java虚拟机栈 java本地方法栈 程序计数器)
GC回收算法
java四大引用
值传递与引用传递区别
java创建一个对象 是在java内存哪个区域?
java基本数据类型
java static与final区别?
String StringBuilder 和StringBuffer区别?
Integer与int区别
序列化与反序化的区别
泛型擦除
泛型向上转型与向下转型
面向对象三大特征
重载与重写的区别
抽象类与接口的区别
java锁机制
悲观锁与乐观锁的区别
volatile和synchronized的区别
java多线程方式
进程与线程区别
线程池原理
线程池包括那些类
CurrentHashMap与HashMap区别
HashMap存储过程
HashMap如何解决Hash冲突
Vector与ArrayList原理与区别
Java反射机制
JVM原理
Java静态代理与动态代理的区别
Java设计模式
单例DCL机制为什么要校验二次?
DCL去掉第一个判空会出现什么情况?
DCL去掉第二层判空会出现什么情况?
java如何实现自定义线程池?

5.2 Android

5.2.1
Activity/Fragment生命周期
Activity横竖屏切换生命周期
从A界面启动B A的生命周期流程 B生命周期的流程
onSavedInstanceState()和onRestoreInstanceState()区别
Activity启动模式
Intent传递数据方式
Intent显示/隐式区别
Intent传递数据有上限吗 是多少?
onNewIntent什么时候调用?
Service启动方式
Android Service与进程区别
Android四大组件
Android如何修改数据库字段
子线程更新UI方式
bitmap与.9图区别
Handler机制
Handler屏障机制
Handler如何保证主线程不卡死
ThreadLocal是什么?
Android跨进程通讯方式
Binder机制
Android自定义View绘制流程
activity上面有透明的背景 activity执行流程
Android事件分发机制
Android 自定义ListView与自定义RecycleView实现原理
Okhttp3原理
Retrofit2原理
RXJava原理
Glide缓存机制
Android oom如何产生 如何解决?
Android性能优化
Android内存泄漏
Android 电量优化
Android屏幕适配
Android动画
Android属性动画与普通动画的区别
Android组件化与模块化区别
Android MVC MVP MVVM架构区别
Android 如何提高Gradle编译速度?
Android Jetpack全家桶
ART和Dalvik区别
Dex分包
Android混淆作用
Android NDK开发流程
Android21种设计模式 常问(单例 观察者 工厂 策略 构建者 适配器 代理 状态模式 ) 结合案例进行讲解
App启动流程
Activity启动流程
Android Launcher开发流程
Android系统版本比较经典一些版本特性比如Android6.0 Android 11
Webpng图片是在Android 哪个sdk api版本开始支持?
Android自定义属性动画
Android使用binder机制好处是(1、拷贝数据一次拷贝 仅次于linux共享内存 2、安全性每次拷贝数据会带上pid/uid)
Android binder同一进程binder所传输数据总量大小限制(1MB)
你最了解Android原生view源码你讲下
Android如何实现一键换肤(Android framework层 通过约定自定义drawable资源接口)
Android里面如何实现页面自由拖拽

5.3 Kotlin

Kotlin面试题

5.4 Flutter

Flutter面试题

5.5 计算机网络

三次握手四次挥手
TCP/IP属于七层协议哪一层
https与http区别
对称加密与非对称加密
get与post请求区别
为什么TCP协议是可靠协议
TCP/UDP的区别
TCP数据粘包问题怎么解决?
cookie与session区别
WebSocket协议
心跳机制
udp与tcp如何保证发的包顺序是一致的

5.6 其他

Android ijkplayer原理
编译过ijk吗
h264如何将数据塞到对应ijkplayer
弱网优化是怎么做的
在你这些开发项目中遇到最大难题是什么 怎么解决的?
目前你团队开发有多少 你公司规模多大
项目开发流程
独立带过项目吗
项目中直播黑屏花屏问题怎么处理的 一般会有那些情况?
黑屏以及视频的缓冲是怎么处理的?
蓝牙通讯流程
串口通讯流程
不同串口波特率区别是什么
如果有一堆蓝牙设备 怎么快速找到你想要的设备 蓝牙设备连接数是有上限的?
m3u8原理
rmtp协议
mqtt协议
websocket与http区别
电量如何优化
h264与h265的区别
音视频同步问题怎么解决
如果有一个场景 app这边实时传输图片信息给电脑你会怎么做?能实现方式有哪些?
每次做完项目你会总结吗?
P2P打洞方式?
二叉树与冒泡排序(sdk相关面试题)
jni开发流程
Opencv库使用过吗?集成一个流程

6、面试总结

6.1 简历一定多花时间准备好 并且要熟悉里面内容 简历模板不知道推荐五百丁上面有很多模板可以选择 可以根据自己喜好选择
6.2 面试多背一些八股文这些资料来源可以是网上或者github也可以是个人网站以及平时自己积累 可以继续迭代更新 比如用一些思维导图 xmind或者process on 工具 把学到的知识整理一张图谱 方便自己记忆 以后需要复习随时都可以查看
6.3 每次面试完一定要总结 这个也是大多数为啥面试了那么多家没拿到offer原因 面试完然后问了啥自己也不清楚 有些常问题目自己一定要总结反复推敲 不然下次又会在同样问题丢分 多总结 多反思。
6.4 调整好心态 这个也是非常重要本来面试考察是面试者 专业能力 +职业素养 +岗位匹配度 就算失败也没事 不懂多问 总会学到东西 不要觉得不好意思切记!
6.5 面试的时候不要死背八股文 一定要结合自己现有项目或者case去回答 或者举例说明
6.6 把握面试的时间 不要一直说个不停以免造成面试官反感 觉得以自我为中心
6.7 相信大家面试都会被问到一个问题 就是你还有什么要问我的 这个我建议大家可以按照以下几点去提问 公司发展方向 岗位负责工作职责主要跟哪些部门对接 公司架构 公司团队规模 试用期转正考核 岗位培训体系 晋升渠道 领导怎么分配任务 如果团队遇到问题怎么协助去解决等等 面试本来就是相互了解过程 这样自己以后入职可以做到心中有数 千万不要说自己没问题 切记哈!

7、转载请注明出处

以上是关于C# 基础编程题集锦的主要内容,如果未能解决你的问题,请参考以下文章

Android面试题基础集锦总结《二》

笔试题集锦(编程题)

笔试题集锦(编程题)

笔试题集锦(编程题)

《LeetCode零基础指南》(第十四讲) 力扣常见报错集锦

javascript基础集锦_Json