13个数的问题
题目:Give 7 numbers, range from 0-13. The number of 0 is uncertain, other numbers can appear only once. 0 can be converted to any number. Please check whether or not it contains 5 continuous numbers
取到7个数,0可以重复,其他不重复,0可以充当任意数,判断7个数里面是否存在5个连续数
1,5,2,4,0,13,10 0->3 1,2,3,4,5,10,13 return true
1,5,2,0,0,13,10 0->3 0->4 1,2,3,4,5,10,13 return true
1,5,6,0,0,13,10 return false
实现代码:
///jailusd@hotmail.com
///2006-09-08
using System;
using System.Collections.Generic;
using System.Text;
namespace SevenNumber
{
class Program
{
static List<int> SevenNumber = new List<int>();
static List<int> FiveNumber = new List<int>();
static List<int> ZeroInsteadOf = new List<int>();
static void Main(string[] args)
{
int intZeroCount = 0;
//随机7个产生0-13整数,除了0其它数字不能重复
Random myRandom = new Random();
while (SevenNumber.Count < 7)
{
int intTemp = myRandom.Next(0, 14);
if (intTemp == 0)
{
intZeroCount++;
SevenNumber.Add(0);
Console.Write(intTemp.ToString() + " ");
}
else if (!SevenNumber.Contains(intTemp))
{
SevenNumber.Add(intTemp);
Console.Write(intTemp.ToString() + " ");
}
}
SevenNumber.Sort(); //排序
Console.Write(" ");
//输出排序后的七个数
for (int i = 0; i < 7; i++)
{
Console.Write(SevenNumber[i].ToString() + " ");
}
bool blResult = false;
//以下为核心算法
for (int i = intZeroCount; i < 7; i++)
{
int intTemp1 = 0;
int intTempZero = intZeroCount;
FiveNumber.Add(SevenNumber[i]);
for (int ii = i; ii < 6; ii++)
{
intTemp1 = SevenNumber[ii + 1] - SevenNumber[ii] - 1;
if (intTemp1 == 0)
{
FiveNumber.Add(SevenNumber[ii + 1]);
}
else if (intTemp1 <= intTempZero)
{
intTempZero -= intTemp1;
for (int j = 1; j <= intTemp1; j++)
{
FiveNumber.Add(SevenNumber[ii] + j);
ZeroInsteadOf.Add(SevenNumber[ii] + j);
}
FiveNumber.Add(SevenNumber[ii + 1]);
}
else
{
for (int j = 1; j <= intTempZero; j++)
{
FiveNumber.Add(SevenNumber[ii] + j);
ZeroInsteadOf.Add(SevenNumber[ii] + j);
}
ii = 5;
}
}
if (FiveNumber.Count >= 5)
{
blResult = true;
Console.Write(" ");
for (int m = 0; m < ZeroInsteadOf.Count; m++)
{
Console.Write("0->" + ZeroInsteadOf[m].ToString() + " ");
}
Console.Write(" ");
for (int m = 0; m < FiveNumber.Count; m++)
{
Console.Write(FiveNumber[m].ToString() + " ");
}
i = 7;
}
else
{
FiveNumber.Clear();
ZeroInsteadOf.Clear();
}
}
if (blResult)
{
Console.Write(" return true;");
}
else
{
Console.Write(" return false;");
}
Console.ReadLine();
}
}
}
///2006-09-08
using System;
using System.Collections.Generic;
using System.Text;
namespace SevenNumber
{
class Program
{
static List<int> SevenNumber = new List<int>();
static List<int> FiveNumber = new List<int>();
static List<int> ZeroInsteadOf = new List<int>();
static void Main(string[] args)
{
int intZeroCount = 0;
//随机7个产生0-13整数,除了0其它数字不能重复
Random myRandom = new Random();
while (SevenNumber.Count < 7)
{
int intTemp = myRandom.Next(0, 14);
if (intTemp == 0)
{
intZeroCount++;
SevenNumber.Add(0);
Console.Write(intTemp.ToString() + " ");
}
else if (!SevenNumber.Contains(intTemp))
{
SevenNumber.Add(intTemp);
Console.Write(intTemp.ToString() + " ");
}
}
SevenNumber.Sort(); //排序
Console.Write(" ");
//输出排序后的七个数
for (int i = 0; i < 7; i++)
{
Console.Write(SevenNumber[i].ToString() + " ");
}
bool blResult = false;
//以下为核心算法
for (int i = intZeroCount; i < 7; i++)
{
int intTemp1 = 0;
int intTempZero = intZeroCount;
FiveNumber.Add(SevenNumber[i]);
for (int ii = i; ii < 6; ii++)
{
intTemp1 = SevenNumber[ii + 1] - SevenNumber[ii] - 1;
if (intTemp1 == 0)
{
FiveNumber.Add(SevenNumber[ii + 1]);
}
else if (intTemp1 <= intTempZero)
{
intTempZero -= intTemp1;
for (int j = 1; j <= intTemp1; j++)
{
FiveNumber.Add(SevenNumber[ii] + j);
ZeroInsteadOf.Add(SevenNumber[ii] + j);
}
FiveNumber.Add(SevenNumber[ii + 1]);
}
else
{
for (int j = 1; j <= intTempZero; j++)
{
FiveNumber.Add(SevenNumber[ii] + j);
ZeroInsteadOf.Add(SevenNumber[ii] + j);
}
ii = 5;
}
}
if (FiveNumber.Count >= 5)
{
blResult = true;
Console.Write(" ");
for (int m = 0; m < ZeroInsteadOf.Count; m++)
{
Console.Write("0->" + ZeroInsteadOf[m].ToString() + " ");
}
Console.Write(" ");
for (int m = 0; m < FiveNumber.Count; m++)
{
Console.Write(FiveNumber[m].ToString() + " ");
}
i = 7;
}
else
{
FiveNumber.Clear();
ZeroInsteadOf.Clear();
}
}
if (blResult)
{
Console.Write(" return true;");
}
else
{
Console.Write(" return false;");
}
Console.ReadLine();
}
}
}
运行结果: