我必须编写一个程序,该程序将接收一系列由逗号分隔的自然数,例如 [13,2,44,56,78,3,354] 并拉出一个子字符串,该子字符串的元素不小于之前的元素,例如其 [2,44,56,78]。如果有多个这样的子字符串要显示较长的子字符串。到目前为止,我有这个。
using System;
using static System.Console;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string s1 = ReadLine();
string[] numbers = Regex.Split(s1, @"D+");
foreach (string value in numbers)
{
if (!string.IsNullOrEmpty(value))
{
int i = int.Parse(value);
int highest =
}
} WriteLine(s1);
Console.ReadKey();
}
}
现在我必须比较下一个数字是比下一个小还是大,我在这里陷入困境。有什么想法吗?
如果我理解正确,您需要如下所示的内容:
string numbers = "13,2,44,56,78,3,354,1,2,3,4,5,4";
var values = numbers.Split(',').Select(a => int.Parse(a)).ToArray();
var maxStart = values.Length > 0 ? values[0] : 0;
var maxLength = values.Length > 0 ? 1 : 0;
int currentStart = 0;
int currentLength = 1;
for (int i=0; i<values.Length; i++)
{
if (i + 1 < values.Length && values[i + 1] >= values[i])
currentLength++;
else
{
if (currentLength > maxLength)
{
maxLength = currentLength;
maxStart = currentStart;
}
currentStart = i + 1;
currentLength = 1;
}
}
Console.WriteLine("Start={0}, Length={1}, Sequence={2}", maxStart, maxLength,
string.Join(",", values.Skip(maxStart).Take(maxLength)));
//Start=7, Length=5, Sequence=1,2,3,4,5
抱歉,
我无法对此进行测试(或查找正确的调用),但希望您能理解要点。 您读取每个数字,看看它是否比前一个数字>=。如果是,则将其存储在列表中。 一旦有一个数字小于前一个数字,您就可以打印出序列并清除列表。
List<int> sequence = new List<int>(10);
int previousNumber = -1;
int currentNumber = -1;
foreach (string value in numbers)
{
if (!string.IsNullOrEmpty(value))
{
currentNumber = int.Parse(value);
if (currentNumber >= previousNumber)
{
sequence[sequence.Length()] = currentNumber;
previousNumber = currentNumber;
}
else
{
if (sequence.Length() > 1)
{
// print sequence.
}
// Erase everything in the list.
}
}
}