基础算法
- 在主方法中调用
n的阶乘
- 1题 从控制台接收用户输入的一个正整数n,请输出n的阶乘结果。
-
public static void Tinv() { Console.WriteLine("请输入一个正整数"); long item = long.Parse(Console.ReadLine()); //声明一个变量 long num = 1; for (long i = 1; i <=item; i++) { //累乘法 num = num * i; } //输出 Console.WriteLine(num); }
- 回文数算法
- 2题 从控制台接收用户输入的一个正整数n,请判断n是不是回文数,结果输出为true或false。
public static void Pdnum() { Console.WriteLine("请输入一个正整数"); string num = Console.ReadLine(); //默认输入的是回文数字 bool judge = true; //num.Length/2这里是对半比 如:10的一半就是5 5和5对比 for (int i = 0; i < num.Length/2; i++) { #region 算法原理 //num[i]for循环第i次 不等于 倒数第二个数时 //例如10 for循环/2了就 num的值5 等于1 2 3 4 5 //而这时for循环需要执行五次,当第一次循环时i=0 带入运算得出4是相等的则继续推 //否则不相等则会进入到if语句返回false 得出结果 #endregion if (num[i]!=num[num.Length-1-i]) { judge = false; break; } } Console.WriteLine(judge); }
水仙花数!
- 从控制台接收用户输入的两个正整数i和j(不能保证i一定小于j),请找出从i到j之间所有的水仙花水,若一个都没有,输出“不存在”。
public static void Narci() { Console.WriteLine("请输入两个正整数"); Console.WriteLine("第一个正整数"); int num1 = int.Parse(Console.ReadLine()); Console.WriteLine("第二个正整数"); int num2 = int.Parse(Console.ReadLine()); if (num1>num2) { //转化为了让小的数在前大的在后 int num3 = num1; num1 = num2; num2 = num3; //这时num2>num1 } //默认是不存在 bool judge = false; for (int i = num1; i < num2; i++) { if (i>=100&&i<=999) { //求百位上的数 int b = i / 100; int s = i / 10 % 10 ; int g = i % 10; if (b*b*b+s*s*s+g*g*g==i) { Console.WriteLine(i); judge = true; } } //输入数字小于100的情况下 else if (i >= 0 && i <= 99) { int s = i / 10 % 10; int g = i % 10; if (s * s * s + g * g * g == i) { Console.WriteLine(i); judge = true; } } } //如果上面循环执行完了还是没找到水仙花数 if (judge==false) { Console.WriteLine("不存在"); } }
斐波那契序列算法
-
接收用户输入的一个正整数n,请输出斐波那契序列第n-1项、第n项和第n+1项。
【参考测试用例】
输入 输出
5 3 8 5
10 34 55 89
主方法调用调 Rgth()
public static void Rgth() { Console.WriteLine("请输入一个正整数"); int Bi = int.Parse(Console.ReadLine()); Console.Write(F(Bi - 1)+"\t");//第n-1项 Console.Write(F(Bi)+"\t");//第n项 Console.Write(F(Bi+1));//第n+1项 } //公式方法 public static int F(int n) { //当n小于3时 直接给出返回值 if (n < 3) { return 1; } //当n等于3时,直接给出返回值 if (n == 3) { return 2; } //重点在F(n - 1) + F(n - 2) 公式 return F(n - 1) + F(n - 2);//递归调用 }
随机生成算法序列
-
考虑如下的序列生成算法:从整数 n 开始,如果 n 是偶数,把它除以 2;如果 n 是奇数,把它乘 3 加1。用新得到的值重复上述步骤,直到 n = 1 时停止。例如,n = 22 时该算法生成的序列是:
22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
人们猜想(没有得到证明)对于任意整数 n,该算法总能终止于 n = 1这个猜想对于至少 1 000 000内的整数都是正确的。请通过编码实现上述算法,接收用户输入的一个正整数n,套入上述算法中,将生成的序列输出控制台。
public static void Sing() { Console.WriteLine("请输入一个正整数"); int num = int.Parse(Console.ReadLine()); //这里是前面输入的数,算到数列里 所以这里添加个输出 Console.Write(num + " "); while (num!=1) { //如果是偶数 if (num%2==0) { //让它迭代 num = num / 2; } //不是偶数 是奇数 else { //让它迭代 num = num * 3+1; } Console.Write(num + " "); //输出 } }
/银行卡验证
- 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
该校验的过程:
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积 为两位数,则将其减去9),再求和。
3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
例如,卡号是:5432123456788881
则,奇数位和=35
偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
最后35+35=70 可以被10整除,认定校验通过。
public static void Yith() { Console.WriteLine("请输入卡号:"); string evo = Console.ReadLine(); //声明变量用于for循环里的判断偶数情况 从1开始 int k = 1; //声明接收偶数的和 int suma = 0; //声明接收奇数的和 int sumb = 0; //是逆向从最后一位数开始 所以evo.Length - 1 位数逐减 i-- for (int i = evo.Length - 1; i >= 0; i--, k++) { //当推到偶数求余=0时 if (k%2==0) { //第evo[i]位数 .int接收 转成字符串 int sums = int.Parse(evo[i].ToString()) * 2; //三目运算 如果sums大于9 则就减去9 没大于9就等于原来的数 int s = sums > 9 ? sums - 9 : sums; //迭代 suma = suma + s; } //一直循环遇到奇数时 else { //把奇数迭代相加 第几个数 sumb = sumb + int.Parse(evo[i].ToString()); } } //判断奇偶和对10求余 if ((suma+sumb)%10==0) { Console.WriteLine("成功"); } else { Console.WriteLine("失败"); } }


浙公网安备 33010602011771号