在字符串数字中找出漏写的哪位

面试题有一道题如下: 用程序在字符串 “5678910111314151617181920” 找出差哪位???

今天自己在网上找资料实现了一把! 

第一步:编写应用程序

 1 static void Main(string[] args)
 2         {
 3             Console.WriteLine("返回第一个数是:" + FindMissingNumberInString("78910111314151617"));
 4 
 5             Console.WriteLine("返回第二个数是:{0}", FindMissingNumberInString("9899100101103104105106"));
 6 
 7             Console.WriteLine("返回第三个数是:{0}", FindMissingNumberInString("9989991000100210031004"));
 8 
 9             Console.ReadKey();
10         }
View Code

 

第二步:创建公用方法    FindMissingNumberInString(string s)

 1  // FindMissingNumberInString
 2         public static int FindMissingNumberInString(string s)
 3         {
 4             int returnResult = 0;
 5             // i 从 1 开始,表示把字符串从一位数开始拆 ,比如”78910111314151617“ 拆为:7,8,9。。。。。
 6             // i 累加为2时:表示拆为 2位数,拆为:78,91,01,11。。。。。
 7             // i 累加为3时:表示拆为 3位数,拆为:789,101,113。。。。。
 8             for (int i = 1; i < 4; i++) 
 9             {
10                 int[] number = GetNumbersFromString(s,i);
11                 int result;
12                 if (FindMissingNumber(number, out result)) 
13                 {
14                     returnResult = result;
15                 }
16             }
17             return returnResult;
18         }
View Code

 

第三部:创建拆分字符串的方法,并保存到List<int>() 集合中

 1   // 拆分字符串的方法 GetNumbersFromString
 2         public static int[] GetNumbersFromString(string s,int i)
 3         {
 4             var resultList = new List<int>();
 5             int index = i;
 6             // 根据 i 来截取字符串的位数
 7             int number = int.Parse(s.Substring(0, i));
 8             // 保存到集合里面
 9             resultList.Add(number);
10 
11             while (index < s.Length) 
12             {
13                 string part;
14                 number++;
15                 i = number.ToString().Length;
16                 if (s.Length - index < i)
17                     part = s.Substring(index);
18                 else
19                     part = s.Substring(index, i);
20                 resultList.Add(int.Parse(part));
21                 index += i;
22             }
23 
24             return resultList.ToArray();
25         }
View Code

第四步:验证、比较、找出 漏写的哪位数

 1     // 验证 缺哪位数的方法
 2         // 因为 前一位比后一位小1,所以拿后一位减去前一位正确情况等于1,等于2是表示差的就是这位数,保存下来当返回结果
 3         public static bool FindMissingNumber(int[] number,out int result)
 4         {
 5             result = 0;
 6             int? found = null;
 7             for (int i = 1; i < number.Length; i++) 
 8             {
 9                 switch (number[i] - number[i - 1]) 
10                 {
11                     case 1:
12                         break;
13                     case 2:
14                         if (found == null)
15                             found = number[i] - 1;
16                         else
17                             return false;
18                         break;
19                     default:
20                         break;
21                 }
22             }
23             if (found.HasValue) 
24             {
25                 result = found.Value;
26                 return true;
27             }
28             return false;
29         }
View Code

 效果

OK 搞定 只要有规律,并且是数字都可以找出漏写的哪位数;

转载于:https://www.cnblogs.com/liqie/p/3912491.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值