100分,100分,请求高手解决,不够可以加!

懒牛科技 2006-11-19 11:17:40
题目如下:
在0-13内随机生成7个数字,要求如下:0可以出现多次,其他数字只能出现一次,比如0,3,5,7,1,0,10等,并对生成的该组数字判断,要求如下:数组内数字0可以替换0-13内的任何数字,如果被该数组内能形成5个连续的数字,则正确,否则不正确;
比如:0,3,1,4,0,13,10能转换成0,1,2,3,4,10,13--》正确;
1,3,0,0,0,7,9能转换1,2,3,4,5,7,9或者1,3,5,6,7,8,9--》都正确
1,6,9,11,13,0,7---》不正确
...全文
490 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zerohk 2006-11-20
  • 打赏
  • 举报
回复
先顶一下,呆会再仔细看
mengwuxing 2006-11-20
  • 打赏
  • 举报
回复
generate()方法用递归的
mengwuxing 2006-11-20
  • 打赏
  • 举报
回复
呵呵,拿来练手了 搞定了

添加一个button和一个label,label拉长一点
private void
button1_Click(object sender, EventArgs e)
{
ArrayList al = new ArrayList();
al=generate();
label1.Text = "";
for (int i = 0; i < 7; i++)
{
label1.Text += al[i].ToString()+" ";
}
if (CheckCount(al) == true)
{
MessageBox.Show("您生成了正确的7个数。");
}
else
{
MessageBox.Show("您生成的不正确,重新生成。");
}
}
//产生符合要求的随机数列,避免了产生的随机数列概率不等的情况!!
private ArrayList generate()
{
Random rd = new Random();
ArrayList al = new ArrayList();

while (al.Count!=7)
{
al.Add(rd.Next(0,13));
}
al.Sort();
for(int i=0;i<6;i++)
{
if((int)al[i]!=0&&(int)al[i]==(int)al[i+1])
al=generate();
}
return al;
}
private bool CheckCount(ArrayList al)
{
bool flg = false;
//如果随机数列中0的个数大于3,那么该数列一定正确
if((int)al[2]==0)
flg=true;
//如果数列中0的个数为2,那么al[i+2]-al[i]<6时数列才正确
else if((int)al[1]==0)
for(int i=2;i<5;i++)
{
if((int)al[i+2]-(int)al[i]<6)
flg=true;
}
//如果数列中0的个数为1,那么al[i+3]-al[i]<6时数列才正确
else if((int)al[0]==0)
for(int i=1;i<4;i++)
{
if((int)al[i+3]-(int)al[i]<6)
flg=true;
}
//如果数列中0的个数为0,那么al[i+4]-al[i]<6时数列才正确
else
for(int i=0;i<3;i++)
{
if((int)al[i+4]-(int)al[i]<6)
flg=true;
}
return flg;

}
renmasheshou 2006-11-20
  • 打赏
  • 举报
回复
.NET考算法吗???
破碎的脸 2006-11-19
  • 打赏
  • 举报
回复
不过就是些判断。先生成七个数字的一个数组,然后用下标1去减下标0,看看是否大于1,然后用下标2去减下标1,再看看是否大于1,并记录,然后从相减的结果中去寻找最接近的几个数,并对应原始数组进行替换。如果是0才能替换的话。。。估计完成难度会大一点,不过原理应该一样,代码就不现丑了。
懒牛科技 2006-11-19
  • 打赏
  • 举报
回复
是一道面试题,谢谢!
liujia_0421 2006-11-19
  • 打赏
  • 举报
回复
挺有意思...
股神 2006-11-19
  • 打赏
  • 举报
回复
up
seaice420 2006-11-19
  • 打赏
  • 举报
回复
不明白什么意思呀
feifeiyaqi3 2006-11-19
  • 打赏
  • 举报
回复
up
dinse 2006-11-19
  • 打赏
  • 举报
回复
好象很难,不会,帮你顶!记得给分
懒牛科技 2006-11-19
  • 打赏
  • 举报
回复
怎么没有人呢?
懒牛科技 2006-11-19
  • 打赏
  • 举报
回复
分不够可以加,谢谢高手门
kook_tian 2006-11-19
  • 打赏
  • 举报
回复
看看是不是这意思,画一个button和一个label。
using System.Collections;

private int counter;
private void button1_Click(object sender, EventArgs e)
{
Random rd = new Random();
ArrayList al = new ArrayList();

while (al.Count!=7)
{
al.Add(rd.Next(0,13));
if (al[al.Count-1].ToString() != "0")
{
for (int i = 0; i < al.Count-1; i++)
{
if (al[al.Count - 1].ToString() == al[i].ToString())
{
al.RemoveAt(al.Count -1);
}
}
}
}
al.Sort();
al.ToArray();
label1.Text = "";

for (int i = 0; i < 7; i++)
{
label1.Text += al[i].ToString()+" ";
}
if (CheckCount(al) == true)
{
MessageBox.Show("您生成了正确的7个数。");
}
else
{
MessageBox.Show("您生成的不正确,请点击按钮重新生成。");
}
}
private bool CheckCount(ArrayList al)
{
bool flg = false;
for (int i = 1; i < 7; i++)
{
if ((int)al[i] == (int)al[i - 1] + 1)
{
counter += 1;
if (counter == 4)
{
flg = true;
}
if (counter > 4)
{
flg = false;
}
}
else
{
counter = 0;
}
}
counter = 0;
return flg;
}

}
hatacpk 2006-11-19
  • 打赏
  • 举报
回复
如果要用排序的方法,那用ArrayList.sort()吧,方便又好用
Jiangyue2007 2006-11-19
  • 打赏
  • 举报
回复
我想的一个方法:
1.先对随机产生的数按从小到大进行排序
2.记录下有多少个0,保存在num中
3.开始对排序之后的数组遍历,从第一个不是0的数开始,用与它之后的第5-num个数的差值数与他们的位置差值数相减,看是否小于num,若比num小,则返回true,否则返回false.

当然应该还会有更好的办法。。。。
siecj 2006-11-19
  • 打赏
  • 举报
回复
进来学习..
hatacpk 2006-11-19
  • 打赏
  • 举报
回复
判断第4步骤的最大连续数
1.另外设定一个MaxCount
2.Count持续累加,直到碰到下一个A中值为0
跟MaxCount比较
if( Count > MaxCount )
{
MaxCount = Count;
Count = 0;
}
3.直到回圈跑到A最后为止再跟MaxCount比较一次

记得,当你要重新产生新的7个数字前,包括这个MaxCount也都要归零才行
hatacpk 2006-11-19
  • 打赏
  • 举报
回复
这看起来似乎不简单 但其实是不难的
宣告:
1..一个布林阵列A,大小为你数字欲产生的范围,里面只放0跟1代表true或false,预设值为0
2.宣告一个for回圈来随机产生7个数字
3.将 A[随机产生的数字] 设为1,并另纪录0的个数为B
4.再用一个Count来存入此A阵列最大连续的1个数,注:A[0]先不计
5.最后把Count加上0的个数B
6.判断是否大于等于5就行啦

若你要连续跑的话,则步骤2之上再设定一个for回圈,但记得把Count(最大连续累加数),B(0的个数)跟A阵列所有值归零
gfgf77 2006-11-19
  • 打赏
  • 举报
回复
我做了一个你可以看看 不知道对不对
Random rd=new Random();
int[] num=new int[7];
int snum=-1;
int count=0;
for(int i=0;i<7;i++)
{
num[i]=rd.Next(13);
Console.Write("{0},",num[i].ToString());
if(i==0)
{
snum=num[0];
count++;
continue;
}
if(snum==num[i]-1 || snum==0)
{
count++;
if(count==5)
break;
}
else
{
count=0;
}
snum=num[i];
}
if(count==5)
{
Console.WriteLine("正确");
}
else
{
Console.WriteLine("错误");
}
Console.ReadKey();
加载更多回复(1)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧