C#练习
斐波那契前N位
冒泡排序
回文
最大公约数和最小公倍数
查找一个字符串中出现次数最多的字符
快速排序
二进制字符串转换十进制整数
判断素数
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
//斐波那契前N位
//Fibonacci();
//冒泡排序
//BubbleSort();
//回文
//Palindrome();
//最大公约数和最小公倍数
//GcdAndLcm();
//查找一个字符串中出现次数最多的字符
//SearchMostChar();
//快速排序
//QuickSort();
//将一个二进制字符串转换十进制整数。
//BinaryToDecimal();
//判断素数。
//IsPrime();
Console.ReadLine();
}
public static List<int> ListNum = new List<int>();
/// <summary>
/// 输出前N个斐波那契数字
/// </summary>
public static void Fibonacci()
{
Console.WriteLine("Input a number");
int inputNum = int.Parse(Console.ReadLine() ?? string.Empty);
var oneNum = 1;
ListNum.Clear();
if (inputNum < 0)
{
return;
}
for (var i = 0; i < inputNum; i++)
{
if (i > 1)
{
oneNum = ListNum[i - 2] + ListNum[i - 1];
// Console.WriteLine($"{i}:{oneNum}");
}
ListNum.Add(oneNum);
}
Console.WriteLine("List: " + string.Join(", ", ListNum));
//Console.WriteLine($"list:{ListNum}");
Console.WriteLine("Press any key to exit...");
Console.ReadLine();
}
/// <summary>
/// 冒泡排序
/// </summary>
public static void BubbleSort()
{
int times = 0;
Console.WriteLine("Input a number to burn a random Array");
int mouse = int.Parse(Console.ReadLine() ?? string.Empty);
int[] intArray = RandomArray(mouse);
int forLength = intArray.Length - 1;
for (var i = 0; i < intArray.Length; i++)
{
for (var j = 0; j < forLength; j++)
{
times++;
//Console.WriteLine($"j:{j}");
if (intArray[j] > intArray[j + 1])
{
(intArray[j + 1], intArray[j]) = (intArray[j], intArray[j + 1]);//值置换
mouse = j;
}
}
Console.WriteLine($"i:{i};mouse:{mouse}");
forLength = mouse;
if (mouse == 0)
break;
}
Console.WriteLine("List: " + string.Join(", ", intArray));
Console.WriteLine($"times:{times}");
}
/// <summary>
/// 回文
/// </summary>
public static void Palindrome()
{
Console.WriteLine("Input a String and click Enter to end");
string input = Console.ReadLine();
if (input != null)
{
string reversedString = new string(input.Reverse().ToArray());
将input字符倒序排列组成新的字符串
//char[] charArray = input.ToCharArray();
//Array.Reverse(charArray);
//string reversedString = new string(charArray);
Console.WriteLine("Reversed string: " + reversedString);
if (input == reversedString)
{
Console.WriteLine("Is palindrome");
}
}
}
/// <summary>
/// 最大公约数和最小公倍数
/// </summary>
public static void GcdAndLcm()
{
Console.WriteLine("Input first number and click Enter to continue");
string s1 = Console.ReadLine();
Console.WriteLine("Input first number and click Enter to continue");
string s2 = Console.ReadLine();
if (s1 == null || s2 == null) return;
int n1 = int.Parse(s1);
int n2 = int.Parse(s2);
//if (n1 < n2)
//{
// (n1,n2)=(n2,n1);
//}
int outGcd = n1 % n2 == 0 ? n2 : GCD(n1, n2);
Console.WriteLine($"GCD:{outGcd}");
Console.ReadLine();
int outLcm = LCM(n1, n2,outGcd);
Console.WriteLine($"LCM:{outLcm}");
}
public static int GCD(int a, int b)
{
while (b != 0)
{
(a, b) = (b, a % b);
}
return a;
}
public static int LCM(int a, int b,int outGcd)
{
return a * b / outGcd;
}
/// <summary>
/// 查找使用最多的字符
/// </summary>
public static void SearchMostChar()
{
string inputStr = Console.ReadLine();
if (inputStr == null) return;
int maxCount = 1;
List<char> mostChars = new List<char>();
Dictionary<char, int> dictionary = new Dictionary<char, int>();
foreach (char c in inputStr)
{
if (dictionary.ContainsKey(c))
{
dictionary[c]++;
if (maxCount < dictionary[c])
{
maxCount = dictionary[c];
mostChars.Clear();
mostChars.Add(c);
}
else if (maxCount == dictionary[c])
{
mostChars.Add(c);
}
}
else
{
dictionary.Add(c, 1);
if (maxCount == 1)
{
mostChars.Add(c);
}
}
}
Console.WriteLine($"MostSameCharNumber:{maxCount}");
foreach (var item in mostChars)
{
Console.WriteLine($"{item}");
}
}
/// <summary>
/// 生成随机数组
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public static int[] RandomArray(int n)
{
Random random = new Random();
int[] newArray = new int[n];
for (int i = 0; i < n; i++)
{
newArray[i] = random.Next(100); // 生成一个随机整数
}
return newArray;
}
public static int quickTime = 0;
/// <summary>
/// 快速排序
/// </summary>
public static void QuickSort()
{
Console.WriteLine("Input a number to burn a random Array");
int n = int.Parse(Console.ReadLine() ?? string.Empty);
int[] array = RandomArray(n);
Console.WriteLine("array:" + string.Join(", ", array));
Console.WriteLine("enter to go on");
Console.ReadLine();
Quick(array, 0, array.Length - 1);
Console.WriteLine("QuickSort:" + string.Join(",", array));
Console.WriteLine($"quickTime:{quickTime}");
}
public static void Quick(int[] _array, int _start, int _end)
{
Console.WriteLine($"Quick");
if (_start >= _end)
return;
int key = _array[_start];
int i = _start;
int j = _end;
while (i < j)
{
while (key < _array[j] && i < j)
{
j--;
quickTime++;
}
if (i < j)
{
_array[i] = _array[j];
}
while (key > _array[i] && i < j)
{
i++;
quickTime++;
}
if (i < j)
{
_array[j] = _array[i];
}
}
_array[i] = key;
Quick(_array, _start, i - 1);
Quick(_array, i + 1, _end);
}
/// <summary>
/// 二进制转十进制
/// </summary>
public static void BinaryToDecimal()
{
string binary = Console.ReadLine();
int decimalValue = 0;
int power = 0;
for (int i = binary.Length - 1; i >= 0; i--)
{
if (binary[i] == '1')
{
decimalValue += (int)Math.Pow(2, power);
}
power++;
}
Console.WriteLine($"{binary} to: {decimalValue}");
}
/// <summary>
/// 判断素数
/// </summary>
public static void IsPrime()
{
int input = int.Parse(Console.ReadLine() ?? string.Empty);
if (input < 2)
return;
if (input % 2 == 0)
{
Console.WriteLine(input == 2 ? $"{input} is Prime" : $"{input} is not Prime");
return;
}
for (int i = 3; i < input; i+=2)
{
if (input % i == 0 && input != i)
{
Console.WriteLine($"{input} is not Prime");
return;
}
}
Console.WriteLine($"{input} is Prime");
}
}
}