簡單字元串加密 編寫一個應用程式用來輸入的字元串進行加密,對於字母字元串加密規則如下: 'a→d’ ‘b'→’e’ ‘w’→z' ...... x'→’a’ ‘y'→b' ‘z→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’ ‘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;
}