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;
}