C# 小例子
数组冒泡排序(升序排序):
1 int[] num = { 8, 5, 7, 6, 54, 6, 4, 12, 2, 0, 1, 3 }; 2 //第一种 3 for (int i = 0; i < num.Length - 1; i++) 4 { 5 for (int j = 0; j < num.Length - i - 1; j++) 6 { 7 if (num[j] > num[j + 1]) 8 { 9 int temp = num[j]; 10 num[j] = num[j + 1]; 11 num[j + 1] = temp; 12 } 13 } 14 } 15 //第二种 16 for (int i = 0; i < num.Length - 1; i++) 17 { 18 for (int j = 0; j < num.Length - 1; j++) 19 { 20 if (num[j] > num[j + 1]) 21 { 22 int temp = num[j]; 23 num[j] = num[j + 1]; 24 num[j + 1] = temp; 25 } 26 } 27 } 28 //第三种 29 for (int i = 0; i < num.Length - 1; i++) 30 { 31 for (int j = 0; j < num.Length - 1 - i; j++) 32 { 33 if (num[j] > num[j + 1]) 34 { 35 int temp = num[j]; 36 num[j] = num[j + 1]; 37 num[j + 1] = temp; 38 } 39 } 40 } 41 //第四种: 42 for (int i = 0; i < num.Length - 1; i++) 43 { 44 for (int j = i + 1; j < num.Length; j++) 45 { 46 if (num[i] > num[j]) 47 { 48 int temp = num[i]; 49 num[i] = num[j]; 50 num[j] = temp; 51 } 52 } 53 }
C#中有提供专门排序的方法:System.Array.Sort(要排序的数组);//升序排序
升序排序可以先降序后再反转排序 。
数组降序排序:
1 int[] num = { 8, 5, 7, 6, 54, 6, 4, 12, 2, 0, 1, 3 }; 2 //第一种 3 for (int i = 0; i < num.Length - 1; i++) 4 { 5 for (int j = 0; j < num.Length - i - 1; j++) 6 { 7 if (num[j] < num[j + 1]) 8 { 9 int temp = num[j]; 10 num[j] = num[j + 1]; 11 num[j + 1] = temp; 12 } 13 } 14 } 15 //第二种 16 for (int i = 0; i < num.Length - 1; i++) 17 { 18 for (int j = 0; j < num.Length - 1; j++) 19 { 20 if (num[j] < num[j + 1]) 21 { 22 int temp = num[j]; 23 num[j] = num[j + 1]; 24 num[j + 1] = temp; 25 } 26 } 27 } 28 //第三种 29 for (int i = 0; i < num.Length - 1; i++) 30 { 31 for (int j = 0; j < num.Length - 1 - i; j++) 32 { 33 if (num[j] < num[j + 1]) 34 { 35 int temp = num[j]; 36 num[j] = num[j + 1]; 37 num[j + 1] = temp; 38 } 39 } 40 } 41 //第四种: 42 for (int i = 0; i < num.Length - 1; i++) 43 { 44 for (int j = i + 1; j < num.Length; j++) 45 { 46 if (num[i] < num[j]) 47 { 48 int temp = num[i]; 49 num[i] = num[j]; 50 num[j] = temp; 51 } 52 } 53 }
可用C#中中提供的专门排序的方法来降序,降序排序可以先Array.Sort() 再 Array.Reverse()。【先升序再反转过来】
降序排序可以先升序后再反转排序 。
数组反转排序:
1 string[] str = { "a", "b", "c", "d", "e", "f", "g" }; 2 for (int i = 0; i < str.Length / 2; i++) 3 { 4 string temp = str[i]; 5 str[i] = str[str.Length - 1 - i]; 6 str[str.Length - 1 - i] = temp; 7 }
C#中有提供专门排序的方法:System.Array.Reverse(要排序的数组);//颠倒排序,反转排序
输入一个年份和月份输出这个月份的天数:
1 Console.WriteLine("请输入年份"); 2 try 3 { 4 int year = Convert.ToInt32(Console.ReadLine()); 5 Console.WriteLine("请输入月份"); 6 try 7 { 8 int month = Convert.ToInt32(Console.ReadLine()); 9 if (month >= 1 && month <= 12) 10 { 11 int day = 0; 12 switch (month) 13 { 14 case 1: 15 case 3: 16 case 5: 17 case 7: 18 case 8: 19 case 10: 20 case 12: day = 31; break; 21 case 2: if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) day = 29; else day = 28; break; 22 default: day = 31; break; 23 } 24 Console.WriteLine("{0}年{1}月有{2}天", year, month, day); 25 } 26 else { Console.WriteLine("输入的月份超出范围"); } 27 } 28 catch { Console.WriteLine("输入的月份有误,程序退出"); } 29 } 30 catch { Console.WriteLine("输入的年份有误,程序退出"); } 31 Console.ReadKey();
不断要求用户输入姓名,输入q就结束:
1 string strname = ""; 2 3 while (strname != "q") 4 { 5 Console.WriteLine("请输入你的姓名,输入q结束"); 6 strname = Console.ReadLine(); 7 } 8 Console.ReadKey(); 9 //do...while 10 /*do 11 { 12 Console.WriteLine("请输入你的姓名,输入q结束"); 13 strname = Console.ReadLine(); 14 } while (strname != "q"); 15 Console.ReadKey();*/
不断要求输入一个数字(假定用户输入的是正整数),当用户输入end时显示刚才输入的数字中的最大值:
1 string input = ""; 2 int max = 0; 3 while (input != "end") 4 { 5 Console.WriteLine("请输入一个数字,输入end将显示输入数中的最大值"); 6 input = Console.ReadLine(); 7 if (input != "end") 8 { 9 try 10 { 11 int number = Convert.ToInt32(input); 12 if (number > max) 13 { 14 max = number; 15 } 16 } 17 catch 18 { 19 Console.WriteLine("您收收入的字符串有误,请重新输入"); 20 } 21 } 22 else 23 { 24 Console.WriteLine("您刚才输入的数字中最大值为{0}", max); 25 } 26 } Console.ReadKey();
九九乘法表:
1 for (int i = 1; i <= 9; i++) 2 { 3 for (int j = 1; j <= i; j++) 4 { 5 Console.Write("{0}*{1}={2}\t", i, j, i * j); 6 } Console.WriteLine(); 7 } Console.ReadKey();
百钱买百鸡:(公鸡5元/只,母鸡3元/只,小鸡3只/元)
1 //方法 2 3 /// <summary> 4 /// 求百钱买百鸡的购买方案,返回三种购买方案。 5 /// </summary> 6 /// <param name="Num1">返回的包含第一种购买方案的输出型数组,数组下标从0开始,依次为公鸡数量、母鸡数量、小鸡数量</param> 7 /// <param name="Num2">返回的包含第二种购买方案的输出型数组,数组下标从0开始,依次为公鸡数量、母鸡数量、小鸡数量</param> 8 /// <param name="Num3">返回的包含第三种购买方案的输出型数组,数组下标从0开始,依次为公鸡数量、母鸡数量、小鸡数量</param> 9 public static void BuyChicken(out int[] Num1, out int[] Num2, out int[] Num3) 10 { 11 //g5,m3,x(1/3) 12 Num1 = new int[3]; 13 Num2 = new int[3]; 14 Num3 = new int[3]; 15 //int g, m, x; 16 string str = ""; 17 for (int Cock = 1; Cock <= 19; Cock++) 18 { 19 for (int Hen = 1; Hen <= 33; Hen++) 20 { 21 int Chicken = 100 - Cock - Hen; 22 if (Cock * 5 + Hen * 3 + Chicken / 3 == 100 && Chicken % 3 == 0) 23 { 24 str += Cock.ToString() + "|" + Hen.ToString() + "|" + Chicken.ToString() + "|"; 25 } 26 } 27 } 28 string[] strArray = str.Split(new char[] { '|' }); 29 for (int i = 0; i < strArray.Length; i++) 30 { 31 if (i >= 0 && i <= 2) 32 Num1[i] = Convert.ToInt32(strArray[i]); 33 if (i >= 3 && i <= 5) 34 Num2[i - 3] = Convert.ToInt32(strArray[i]); 35 if (i >= 6 && i <= 8) 36 Num3[i - 6] = Convert.ToInt32(strArray[i]); 37 } 38 } 39 40 //调用 41 int[] Num1; 42 int[] Num2; 43 int[] Num3; 44 BuyChicken(out Num1, out Num2, out Num3); 45 Console.WriteLine("公鸡数量:{0},母鸡数量:{1},小鸡数量:{2}", Num1[0], Num1[1], Num1[2]); 46 Console.WriteLine("公鸡数量:{0},母鸡数量:{1},小鸡数量:{2}", Num2[0], Num2[1], Num2[2]); 47 Console.WriteLine("公鸡数量:{0},母鸡数量:{1},小鸡数量:{2}", Num3[0], Num3[1], Num3[2]);
1 for (int Cock = 1; Cock <= 19; Cock++) 2 { 3 for (int Hen = 1; Hen <= 33; Hen++) 4 { 5 int Chicken = 100 - Cock - Hen; 6 if (Cock * 5 + Hen * 3 + Chicken / 3 == 100 && Chicken % 3 == 0) 7 { 8 Console.WriteLine("Cock:{0},Hen:{1},Chicken:{2}", Cock, Hen, Chicken); 9 } 10 } 11 }
求水仙花数:
1 /// <summary> 2 /// 求水仙花数 3 /// </summary> 4 /// <returns>返回的包含水仙花数的数组</returns> 5 public static string[] SxhNum() 6 { 7 int a, b, c; 8 string str = null; 9 for (int num = 100; num < 1000; num++) 10 { 11 a = num / 100;//1 12 b = num / 10 % 10;//5 13 c = num % 10;//3 14 if (Math.Pow(a, 3) + Math.Pow(b, 3) + Math.Pow(c, 3) == num) 15 { 16 str += num.ToString() + "|"; 17 } 18 } 19 return str.Substring(0, str.Length - 1).Split(new char[] { '|' }); 20 } 21 22 //调用 23 string[] str = SxhNum(); 24 for (int i = 0; i < str.Length; i++) 25 { 26 Console.WriteLine("水仙花数:" + str[i]); 27 }
1 int a, b, c, num; 2 for (num = 100; num < 1000; num++) 3 { 4 a = num / 100; 5 b = num / 10 % 10; 6 c = num % 10; 7 if (a * a * a + b * b * b + c * c * c == num) 8 Console.WriteLine("水仙花数:" + num); 9 }
用while continue实现计算1 到100(含)之间的除了能整除7以外的所有数的和:【4315】
1 int sum = 0; 2 int i = 1; 3 while (i <= 100) 4 { 5 if (i % 7 == 0) 6 { 7 i++; 8 continue; 9 } 10 sum += i; 11 i++; 12 } 13 Console.WriteLine(sum); 14 Console.ReadKey();
找出1到100之内所有的素数(质数)【有25个】:
1 for (int i = 2; i <= 100; i++) 2 { 3 bool b = true;//放在两个循环之间,保证变量b为true 4 for (int j = 2; j < i; j++) 5 { 6 //除尽说明不是质数,没有再进行下去的必要 7 if (i % j == 0) 8 { 9 b = false; 10 break; 11 } 12 } 13 if (b) 14 { 15 Console.WriteLine(i); 16 } 17 } Console.ReadKey();
依次输入分数求总分和平均分:
1 Console.WriteLine("请输入班级人数"); 2 int count = Convert.ToInt32(Console.ReadLine()); 3 Console.WriteLine(); 4 int i = 1; 5 int sum = 0; 6 while (i <= count) 7 { 8 Console.WriteLine("请输入第{0}个人的成绩", i); 9 int score = Convert.ToInt32(Console.ReadLine()); 10 sum += score; 11 i++; 12 } 13 Console.WriteLine("班级的总分数为{0},平均分为{1}", sum, sum / count); 14 Console.ReadKey();
不断要求输入一个数字,然后打印该数字的两倍,输入q时结束:
1 string input = ""; 2 while (input != "q") 3 { 4 Console.WriteLine("请输入一个数字,将打印该数字的两倍"); 5 input = Console.ReadLine(); 6 if (input != "q") 7 { 8 try 9 { 10 int number = Convert.ToInt32(input); 11 Console.WriteLine("您能输入的数字的二倍为{0}", number * 2); 12 } 13 catch 14 { 15 Console.WriteLine("您输入的字符串不能够转换为数字,请重新输入"); 16 } 17 } 18 else 19 { 20 Console.WriteLine("您输入的为q,程序退出"); 21 } 22 }
1-100之间的数整相加,得到累加值大于20的当前数:
1 int sum = 0; 2 for (int i = 0; i <= 100; i++) 3 { 4 sum += i; 5 if (sum >= 20) 6 { 7 Console.WriteLine("加到{0}的时候,总和大于了20", i); break; 8 } 9 } Console.ReadKey();
一组数:1,1,2,3,5,8,13,21,34...... ,每一个是前两个的和,求除第n个数:【斐波那契数列】
1 //写一个方法 2 public static int Foo(int i) 3 { 4 if (i <= 0) 5 return 0; 6 else if (i > 0 && i <= 2) 7 return 1; 8 else return Foo(i - 1) + Foo(i - 2); 9 } 10 11 12 //在Main函数中调用 13 Console.WriteLine("输入你要求第几个数!"); 14 int num = int.Parse(Console.ReadLine()); 15 Console.WriteLine("第{0}个数为:{1}", num, Foo(num));
1 Console.WriteLine("输入你要求第几个数!"); 2 int num = int.Parse(Console.ReadLine()); 3 4 int n0 = 1, n1 = 1; 5 int n = 0; 6 for (int i = 2; i < num; i++) 7 { 8 n = n0 + n1; 9 n0 = n1; 10 n1 = n; 11 } 12 Console.WriteLine(n);
“斐波那契数列”是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci,生于公元1170年,卒于1240年.籍贯大概是比萨).他被人称作“比萨的列昂纳多”.1202年,他撰写了《珠算原理》(Liber Abaci)一书.他是第一个研究了印度和阿拉伯数学理论的欧洲人.他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点相当于今日的阿尔及利亚地区,列昂纳多因此得以在一个阿拉伯老师的指导下研究数学.他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯研究数学. 斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21…… 这个数列从第三项开始,每一项都等于前两项之和.它的通项公式为:(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}(又叫“比内公式”,是用无理数表示有理数的一个范例.)【√5表示根号5】 很有趣的是:这样一个完全是自然数的数列,通项公式居然是用无理数来表达的【斐波那挈数列通项公式的推导】 斐波那契数列:0,1,1,2,3,5,8,13,21…… 如果设F(n)为该数列的第n项(n∈N+).那么这句话可以写成如下形式: F(0) = 0,F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3) 显然这是一个线性递推数列. 通项公式的推导方法: 设常数r,s 使得F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)] 则r+s=1,-rs=1 n≥3时,有 F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)] F(n-1)-r*F(n-2)=s*[F(n-2)-r*F(n-3)] F(n-2)-r*F(n-3)=s*[F(n-3)-r*F(n-4)] …… F(3)-r*F(2)=s*[F(2)-r*F(1)] 将以上n-2个式子相乘,得: F(n)-r*F(n-1)=[s^(n-2)]*[F(2)-r*F(1)] ∵s=1-r,F(1)=F(2)=1 上式可化简得: F(n)=s^(n-1)+r*F(n-1) 那么: F(n)=s^(n-1)+r*F(n-1) = s^(n-1) + r*s^(n-2) + r^2*F(n-2) = s^(n-1) + r*s^(n-2) + r^2*s^(n-3) + r^3*F(n-3) …… = s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1)*F(1) = s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1) (这是一个以s^(n-1)为首项、以r^(n-1)为末项、r/s为公差的等比数列的各项的和) =[s^(n-1)-r^(n-1)*r/s]/(1-r/s) =(s^n - r^n)/(s-r) r+s=1,-rs=1的一解为 s=(1+√5)/2,r=(1-√5)/2 则: F(n)=(√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n} 代入n值可求出相应数
求一组数1,12,123,1234,12345,123456,1234567,......,第n个数的递归算法(n<=9)
1 //写一个方法 2 string Func(int n) //n<=9 3 { 4 if(n<=1) 5 return "1"; 6 return Func(n-1)+n.ToString(); 7 } 8 9 //在Main方法中调用 10 Console.WriteLine("请输入你要求第几个数!"); 11 int num = int.Parse(Console.ReadLine()); 12 Console.WriteLine(Func(num));
将一个数组中的奇数放到一个集合中,再将偶数放到另一个集合中最终将两个集合合并为一个集合,并且奇数项是在左边,偶数显示在右边:
1 int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 2 List<int> Listou = new List<int>();//int类型泛型集合 3 List<int> ListJi = new List<int>();//int类型泛型集合 4 for (int i = 0; i < num.Length; i++) 5 { 6 if (num[i] % 2 == 0) 7 { 8 Listou.Add(num[i]);//添加到集合 9 } 10 else 11 { 12 ListJi.Add(num[i]);//添加到集合 13 } 14 } 15 ListJi.AddRange(Listou); 16 foreach (var item in ListJi) 17 { 18 Console.Write(item + " "); 19 } 20 for (int i = 0; i < ListJi.Count; i++)//输出 21 { 22 Console.Write(ListJi[i] + " "); 23 }
提示用户输入一个字符串,通过foreach循环将用户输入的字符串赋值给一个字符数组:
1 Console.WriteLine("请输入一个字符串"); 2 string input = Console.ReadLine(); 3 char[] ch = new char[input.Length]; 4 int i = 0; 5 foreach (var item in input) 6 { 7 ch[i] = item;//将字符串的字符赋值给字符数组的元素 8 i++; 9 } 10 foreach (var item in ch)//输出 11 { 12 Console.WriteLine(item); 13 }
统计一个字符串中每个字符出现的字数,不考虑大小写:
1 string str = "Welcome to China!"; 2 Dictionary<char, int> dic = new Dictionary<char, int>(); 3 for (int i = 0; i < str.Length; i++) 4 { 5 if (str[i] == ' ' || str[i] == '!') 6 { 7 continue; 8 } 9 //如果dic已经包含当前循环到的这个键 10 if (dic.ContainsKey(str[i]))//是否包含当前键 11 { 12 dic[str[i]]++;//当前对应键的值加1 13 } 14 else//没有这个键,第一次出现 15 { 16 dic[str[i]] = 1;//当前对应键的值为1 17 } 18 } 19 foreach (KeyValuePair<char, int> kv in dic)//输出,KeyValuePair定义可设置或检索的键/值对 20 { 21 Console.WriteLine("字母{0}出现了{1}次", kv.Key, kv.Value); 22 }
1 /// 统计一个字符串中每个字符出现的字数,不考虑大小写 2 /// </summary> 3 /// <param name="str">统计的字符串</param> 4 /// <param name="dic">用来存放字符串中每个字符和字符出现的数量</param> 5 public static void CharTemp(string str, Dictionary<char, int> dic) 6 { 7 for (int i = 0; i < str.Length; i++) 8 { 9 if (str[i] == ' ' || str[i] == '!') 10 { 11 continue; 12 } 13 if (dic.ContainsKey(str[i])) 14 { 15 dic[str[i]]++; 16 } 17 else 18 { 19 dic[str[i]] = 1; 20 } 21 } 22 } 23 24 ///再在Main函数中调用 25 string str = "Welcome to China!"; 26 Dictionary<char, int> dic = new Dictionary<char, int>(); 27 CharTemp(str, dic); 28 foreach (KeyValuePair<char, int> kv in dic)//输出,KeyValuePair定义可设置或检索的键/值对 29 { 30 Console.WriteLine("字母{0}出现了{1}次", kv.Key, kv.Value); 31 } 32 2