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             }
View Code

 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             }
View Code

 可用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             }
View Code

 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();
View Code

 不断要求用户输入姓名,输入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();*/
View Code

 不断要求输入一个数字(假定用户输入的是正整数),当用户输入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();
View Code

九九乘法表

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();
View Code

 百钱买百鸡:(公鸡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]);
View Code

 

 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             }
View Code

  求水仙花数

 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             }
View Code

 

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             }
View Code

用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();
View Code

找出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();
View Code

依次输入分数求总分和平均分

 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();
View Code

不断要求输入一个数字,然后打印该数字的两倍,输入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             }
View Code

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();
View Code

一组数: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));
View Code1
 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);
View Code2

 

“斐波那契数列”是意大利数学家列昂纳多·斐波那契(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));
View Code

 

将一个数组中的奇数放到一个集合中,再将偶数放到另一个集合中最终将两个集合合并为一个集合,并且奇数项是在左边,偶数显示在右边

 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             }
View Code

 

提示用户输入一个字符串,通过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             }
View Code

  

统计一个字符串中每个字符出现的字数,不考虑大小写

 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             }
View Code1
 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    
View Code2

 

posted @ 2016-09-29 21:57  西枫叶落  阅读(1961)  评论(0编辑  收藏  举报