这几天,一直都在找工作,一直都在笔试面试,其中也遇到很多笔试题目,大多都记不清楚了,应该不是很难。
下面分享一个公司给我出的机试题目:要求当m<n时,利用递归实现 m + (m+1) + (m+2) + ... + n
并要求用控制台程序实现,并且当用户输入的参数错误时,提示用户是否要重新输入。
想了一会,写出了如下代码:
/*
=============================================================================
作者:音乐让我说
代码描述:一个简单面试题,要求当m<n时,利用递归实现 m + (m+1) + (m+2) + ... + n
谢谢您的支持,欢迎您的转载,转载时请注明,谢谢!
=============================================================================
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TempConApp
{
class Program
{
static void Main(string[] args)
{
bool isContinue = true;
do
{
Console.WriteLine("\n=======================================================\n");
bool failedIsContinued;
long num1;
if (!GetUserInputNum(1, out num1, out failedIsContinued))
{
isContinue = failedIsContinued;
continue;
}
long num2;
if (!GetUserInputNum(2, out num2, out failedIsContinued))
{
isContinue = failedIsContinued;
continue;
}
if (num1 >= num2)
{
Console.Write("第 1 个数字必须小于第 2 个数字!");
isContinue = GetFailedIsContinued();
continue;
}
long result = GetResult(num1, num2);
Console.WriteLine("结果为:" + result);
} while (isContinue);
Console.WriteLine("程序运行完毕!");
Console.ReadKey();
}
/// <summary>
/// 利用递归,得到从第一个数字到第二个数字之间所有数的总和(最后的总和包括第一个数和第二个数)
/// </summary>
/// <param name="beginNum">第一个数</param>
/// <param name="endNum">第二个数</param>
/// <returns></returns>
static long GetResult(long beginNum, long endNum)
{
if (beginNum >= endNum)
{
return beginNum;
}
return endNum + GetResult(beginNum, endNum - 1);
}
/// <summary>
/// 得到用户输入的数字
/// </summary>
/// <param name="serialNum">数字编号,表明这是输入的第几个数字,第一个调用该方法,传入 1 </param>
/// <param name="outputNum">返回的值</param>
/// <param name="failedIsContinued">转换失败后,是否要继续</param>
/// <returns>返回用户输入的是否是数字,如果是,则返回 true </returns>
static bool GetUserInputNum(int serialNum, out long outputNum, out bool failedIsContinued)
{
bool returnFlag = true;
failedIsContinued = true;
Console.Write("请输入第 " + serialNum + " 个数字:");
string strNum = Console.ReadLine();
if (!long.TryParse(strNum, out outputNum))
{
//转换失败
returnFlag = false;
Console.Write("您输入的第 " + serialNum + " 个数字错误!");
failedIsContinued = GetFailedIsContinued();
}
return returnFlag;
}
/// <summary>
/// 当失败后,获取用户是否想要继续
/// </summary>
/// <returns></returns>
static bool GetFailedIsContinued()
{
Console.Write("是否继续重新输入?(y/n) :");
string isContinueWord = Console.ReadLine();
if (!string.Equals(isContinueWord, "Y", StringComparison.CurrentCultureIgnoreCase))
{
//不继续
return false;
}
return true;
}
}
}
谢谢您的浏览!