经典实例
综合实例
水仙花数(Narcissistic number):
也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 水仙花数 { class Program { static void Main(string[] args) { Console.WriteLine("请按任意键继续:"); Console.ReadLine(); Console.WriteLine("100到1000之间的水仙花数为:"); for (int i = 100; i < 1000;i++ ) { int gw = i % 10; //求个位 int sw = i / 10 % 10; //求十位 int bw = i / 100 % 10; //求百位 if(i==gw*gw*gw+sw*sw*sw+bw*bw*bw) //判断是否为水仙花数 { Console.WriteLine(i); } } Console.ReadKey(); } } }
桃子问题(经典问题):
条件桃子3元一个,3个桃核可以换一个桃子
金额(可以由用户自己输入):100元,求出最多吃多少个桃子
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 买桃问题 { class Program { static void Main(string[] args) { while (true) { //提示并储存输入的数字 Console.WriteLine("请输入你的金钱(桃子3元一个):"); int input = int.Parse(Console.ReadLine()); //把输入给钱,单价定义为3,定义exchan:1次机会等于3个桃核 int money = input, price = 3, exchange = 3; int eated, kernel; //eated:第一次换取得数量 //kerner:第一次吃完后的桃核数量 eated = money / price; kernel = eated; //当kerner大于机会的要求时,进入循环 while (kernel >= exchange) { int peach = kernel / exchange; //peach:用桃核换取得桃子数量 int left = kernel % exchange; //left:换桃子后的桃核余数(肯定小于3) eated += peach; //累加吃的桃子数量 kernel = left + peach; //累加桃核数量 } Console.WriteLine("最多可以吃到" + eated + "个桃子"); //输出 } } } }
哥德巴赫猜想(世界近代三大数学难题之一):
哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和。但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死,欧拉也无法证明。[1] 因现今数学界已经不使用“1也是素数”这个约定,原初猜想的现代陈述为:任一大于5的整数都可写成三个质数之和。欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和。今日常见的猜想陈述为欧拉的版本。把命题"任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b"。1966年陈景润证明了"1+2"成立,即"任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和"。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 买桃问题 { class Program { static void Main(string[] args) { while (true) { //提示并储存输入的数字 Console.WriteLine("请输入你的金钱(桃子3元一个):"); int input = int.Parse(Console.ReadLine()); //把输入给钱,单价定义为3,定义exchan:1次机会等于3个桃核 int money = input, price = 3, exchange = 3; int eated, kernel; //eated:第一次换取得数量 //kerner:第一次吃完后的桃核数量 eated = money / price; kernel = eated; //当kerner大于机会的要求时,进入循环 while (kernel >= exchange) { int peach = kernel / exchange; //peach:用桃核换取得桃子数量 int left = kernel % exchange; //left:换桃子后的桃核余数(肯定小于3) eated += peach; //累加吃的桃子数量 kernel = left + peach; //累加桃核数量 } Console.WriteLine("最多可以吃到" + eated + "个桃子"); //输出 } } } }
斐波那契数列(Fibonacci sequence):
又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 斐波拉数列 { class Program { static void Main(string[] args) { //获取用户输入的长度 Console.WriteLine("请输入斐波拉数列的长度:"); int input = int.Parse(Console.ReadLine()); //创建一个数组 int[] arr = new int[input]; for (int i = 0; i < arr.Length; i++) { //i=0或1,输出1 if (i <= 1) { arr[i] = 1; Console.Write(arr[i] + "\t"); } //数组索引为i的元素值=数组索引为i-1的值+数组索引为i-2的值 else { arr[i] = arr[i - 1] + arr[i - 2]; Console.Write(arr[i] + "\t"); } } Console.ReadLine(); } } }
分解质因数:
每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 分解质因数只针对合数。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 分解质因数 { class Program { static void Main(string[] args) { Console.WriteLine("请输入非质数后回车!"); int inNumber = int.Parse(Console.ReadLine());//将输入转换为int类型 string texRet = inNumber.ToString() + " = ";//将inNumber转换为字符串+等号 //i为被除数,一直增加,直到找到能被除的数 for (int i = 2; i <= inNumber; i++) { if (inNumber % i == 0) { texRet += i.ToString() + "*";//texRet=texRet+i转换成字符串+*号 inNumber = inNumber / i;//将inNumber重新取值 i--; } } texRet = texRet.Substring(0, texRet.Length - 1); Console.WriteLine(texRet); Console.ReadKey(); /* while (true) { Console.WriteLine("请输入一个非质数:"); Console.ReadLine(); int num = Convert.ToInt32(Console.ReadLine()); for (int i = 2; i < num; i++)//循环 1没有质因数 { while (num != i)//num==i的话跳出循环当然num==i你也进不去 { if (num % i == 0)//num%i为0就继续执行 { Console.Write(num+"="+i + "*");//输出质数i的值 num /= i; } else { break; } } } Console.WriteLine(num);//这个是跳出循环的值,没得求了,不跳出来不行啊,当然也是质数 } */ } } }
反序输出:
用户输入字符串后,字母反序输出。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 反序输出 { class Program { static void Main(string[] args) { Console.Write("请输出一个字符串:"); string input = Console.ReadLine(); //定义一个空字符串reverse string reverse = ""; //从大到小循环 for (int i = input.Length - 1; i >= 0; i--) { //索引从大到小存入新字符串内 reverse = reverse + input[i]; } Console.WriteLine(reverse + ":串字符个一出输请"); Console.ReadLine(); } } }
日历控制台:
C#基本的知识实现日历的输出
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 控制台日历 { class Program { static void Main(string[] args) { while (true) { int year, month; //死循环只有全部输对才能跳出进行下一步 while (true) { Console.WriteLine("请输入年份(1900-2100):"); year = int.Parse(Console.ReadLine()); if (year < 1900 || year > 2100) { Console.WriteLine("年份输入错误,请重新输入"); Console.ReadLine(); Console.Clear(); } else { Console.WriteLine("请输入月份(1-12):"); month = int.Parse(Console.ReadLine()); if (month < 1 || month > 12) { Console.WriteLine("月份输入错误,请重新输入:"); Console.ReadLine(); Console.Clear(); } else { break;//跳出循环 } } } //定义一个集合 List<string> dates = new List<string>(); //计算从1900到输入的年份一共有多少年 int crossDayOfYear = 0; for (int i = 1900; i < year; i++) { if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) { crossDayOfYear += 366; } else { crossDayOfYear += 365;//并且累加天数 } } //计算从1月到输入的月份一共有多少个月 int crossDayMonth = 0; for (int i = 1; i < month; i++) { //2月里面有闰年和平年两种情况 if (i == 2) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { crossDayMonth += 29; } else { crossDayMonth += 28; } } //大月的情况 else if (i <= 7 && i % 2 != 0 || i >= 7 && i % 2 == 0) { crossDayMonth += 31; } //小月的情况 else { crossDayMonth += 30; } } int crossDays = crossDayMonth + crossDayOfYear;//crossDays:月份加年份一共有多少天 int dayOfweek = crossDays % 7 + 1;//计算是星期几 int space = dayOfweek - 1;//日历前面的空白数量 for (int i = 0; i < space; i++) { dates.Add("");//循环space次,并添加space次空白 } //年和月计算了,现在计算用户输入的几号的天数 int days; if (month == 2) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { days = 29; } else { days = 28; } } else if (month <= 7 && month % 2 != 0 || month >= 7 && month % 2 == 0) { days = 31; } else { days = 30; } //添加几号进集合 for (int i = 1; i < days; i++) { dates.Add(i.ToString()); } //输出 Console.WriteLine("*********************************************************"); Console.Write("一\t二\t三\t四\t五\t六\t日"); for (int i = 0; i < dates.Count; i++) { //到7位是换行,日历一排七位 if (i % 7 == 0) { Console.WriteLine("\t"); } Console.Write(dates[i] + "\t"); } Console.WriteLine(); Console.WriteLine("*********************************************************"); Console.WriteLine("按回车键继续"); Console.ReadLine(); Console.Clear(); } } } }