请教两个问题··· 考试的 产生20个100之内的随机数,然后按大小排序 有13个人,1,2,3 报数,到三的人出局,然后在继续报数得到最后剩下的那个人原始编号 就是他开始在那13里面是第几个求代码和解释·· 谢谢·· 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for循环Random ran= new Random(DateTime.Now.Millisecond);ran.Next(1,100);http://topic.csdn.net/u/20090906/21/0e56dc96-e19f-4b20-bb04-d6d6e6a0c86a.html?49458 1.产生随机数。用rand.Next(0,100),要是不能重复的话,可以放个hash,进行判断2,排序,很简单,网上代码到处都是3.int i=1;List<int> list=new List<int>();for(int j=0;j<rand.Length;j++){if(i==3){list.Add(rand[j]);i=1;}else{i++;}}得到最后剩下的那个人原始编号 就是他开始在那13里面是第几个这句话不明白什么意思。 hehehehehe 要现成的代码怎么不好?难道开始学习的时候就会写代码吗? private void fTest() { int[] iArray = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; int iCount = 13; ////数组的长度,用于记录非0的数还有多少个 int k = 0; ////记录当前报数到了哪里 int j = 1; ////记录报数是否到了3 while( iCount > 1 ) ////当非0的数只剩一个时,跳出循环 { for( int i = k; i < 13; i++ ) ////每次都从k位开始报数 { if( iArray[i] != 0 && j == 3) ////如果j=3 && 数组的值不是0,则进行如下设置 { iArray[i] = 0; ////将数组值设置成0 j = 1; ////将报数设置成1 k = i+1; ////记录循环访问到哪个位置 iCount--; ////非0数的数量-1 break; } else { j++; ////报数加1 if( k == 12 ) { k++; ////k++这句是当记录k=12时,k+1等于13,循环从头开始,但是报数j仍然取自己的值 } } } if( k > 12 ) { k = k - 13; ////当k>12时,从数组的开头开始继续报数 } } for( int i = 0; i < iArray.Length; i++ )/////将最后的数取出来 { if( iArray[i] != 0 ) { TextBox1.Text = iArray[i].ToString(); break; } } }最后得出的数是13,在。net 2003上测试通过楼主自己在优化一下思路还有:堆栈动态数组等 WCF错误,请帮忙 爱上Oracle了....... c# 的 datagridview 控件哪里有的下载 为什么使用openFileDialog控件后,路径就改变了呢? 急等Picture,using什么引用? 控件循环赋值或取值 为什么昨天还能打开项目文件,今天就“无法从WEB服务器获取项目文件。急急急 DataGrid中记录有没有单击事件 怎样快速扫描指定网段内所有IP地址并返回主机名? 那么多的基类,怎记? vs2008中测试程序时没有代码覆盖率窗口 C# 截取字符串
Random ran= new Random(DateTime.Now.Millisecond);
ran.Next(1,100);
http://topic.csdn.net/u/20090906/21/0e56dc96-e19f-4b20-bb04-d6d6e6a0c86a.html?49458
2,排序,很简单,网上代码到处都是
3.int i=1;
List<int> list=new List<int>();
for(int j=0;j<rand.Length;j++)
{
if(i==3)
{
list.Add(rand[j]);
i=1;
}else
{
i++;
}
}
得到最后剩下的那个人原始编号 就是他开始在那13里面是第几个
这句话不明白什么意思。
{
int[] iArray = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
int iCount = 13; ////数组的长度,用于记录非0的数还有多少个
int k = 0; ////记录当前报数到了哪里
int j = 1; ////记录报数是否到了3 while( iCount > 1 ) ////当非0的数只剩一个时,跳出循环
{
for( int i = k; i < 13; i++ ) ////每次都从k位开始报数
{
if( iArray[i] != 0 && j == 3) ////如果j=3 && 数组的值不是0,则进行如下设置
{
iArray[i] = 0; ////将数组值设置成0
j = 1; ////将报数设置成1
k = i+1; ////记录循环访问到哪个位置
iCount--; ////非0数的数量-1
break;
}
else
{
j++; ////报数加1
if( k == 12 )
{
k++; ////k++这句是当记录k=12时,k+1等于13,循环从头开始,但是报数j仍然取自己的值
}
}
} if( k > 12 )
{
k = k - 13; ////当k>12时,从数组的开头开始继续报数
}
} for( int i = 0; i < iArray.Length; i++ )/////将最后的数取出来
{
if( iArray[i] != 0 )
{
TextBox1.Text = iArray[i].ToString();
break;
}
}
}最后得出的数是13,在。net 2003上测试通过
楼主自己在优化一下
思路还有:
堆栈
动态数组等