123

C#声明一个100大小的数组 随机生成1-100之间不重复的数,存入数组后对数组进行升序和降序排列
下面是C#的实现方式,编译测试通过


public int[] Random1_100ToArray()
{
// 临时存放1-100的List。
List<int> tempList = new List<int>();
for (int i = 1;i <=100 ;i++ )
{
tempList.Add(i);
}

int[] intArray = new int[100];
// 数组的索引。
int index = 0;
Random rnd = new Random();

// 从tempList中随机抽取数,并存入数组中。
while (tempList.Count > 0)
{
// 获得tempList的随机索引。
int randomIndex = rnd.Next(0, tempList.Count);

// 把tempList的随机索引中的数存入数组中。
intArray[index] = tempList[randomIndex];

// 从tempList中去除已经抽取过的数。
tempList.RemoveAt(randomIndex);

// 准备存下一个数。
index++;
}

return intArray;
}


要在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数。

 

主要是下面两个函数getRandomNum与getNum:

 

public int[] getRandomNum(int num,int minValue,int maxValue){

 

Random ra=new Random(unchecked((int)DateTime.Now.Ticks));

int[] arrNum=new int[num];

int tmp=0;

for (int i=0;i<=num-1;i++){

tmp=ra.Next(minValue,maxValue); //随机取数

arrNum[i]=getNum(arrNum,tmp,minValue,maxValue,ra); //取出值赋到数组中

 

}

return arrNum;

}

 
----------------
getRandomNum即是在区间[minValue,maxValue]取出num个互不相同的随机数,返回的数组包含着结果。

 

其中随机数是这样创建的 Random ra=new Random(unchecked((int)DateTime.Now.Ticks));为什么不用Random ra=new Random();(系统自动选取当前时前作随机种子)呢?

 

用系统时间做随机种子并不保险,如果应用程序在一个较快的计算机上运行,则该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,Random 的不同实例的种子值可能相同。这种情况下,我们就需要另外的算法来保证产生的数字的随机性。所以为了保证产生的随机数足够“随机”,我们不得不使用复杂一点的方法来获得随机种子。 在上面的这段程序中,我们首先使用系统时间作为随机种子,然后将上一次产生的随机数跟循环变量和一个与系统时间有关的整型参数相乘,以之作为随机种子,从而得到了每次都不同的随机种子,保证了产生足够“随机”的随机数。

 

函数getNum是一递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。值得注意的是要用一同一个随机数实例生成,所以ra要作为参数传入getNum中,否则生成的数字会有重复。

 

public int getNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra){

int n=0;

while (n<=arrNum.Length-1)

{

if (arrNum[n]==tmp) //利用循环判断是否有重复

{

tmp=ra.Next(minValue,maxValue); //重新随机获取。

getNum(arrNum,tmp,minValue,maxValue,ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。

}

n++;

}

return tmp;

}

 

--------------

1. excel报表里数字的显示为:2E15,(意思是该数字以2开头,一共有16位,位数由15+1确定,
  1是E前有几位数就是几位)本来是200810161031123456,产生这个问题的原因如下:
  首先看数据库里的字段是什么类型的,如果是数字型的,则位数达到16位时就会显示为乱码,
  解决方法可以将该字段的类型改为字符型,确认字段为字符型后问题依然存在
  则检查excel报表里显示数据的单元格设置的格式是否为“文本”.

2.行转列问题
oracle:可以使用decode 或者case when
参考http://oracle.chinaitlab.com/optimize/534546.html
sqlserver2000:case when
sqlserver2005:一个简便的方法

3.反射技术的应用

4.grid表格里的数据滚屏显示,每屏显示10条数据
解决办法:将从数据库取出的数据读到一个DataSet 然后再把数据读到DataView里,
然后利用DataView的RowFilter过滤器过滤数据,然后再把数据写到DataTable

5.声音播放问题
参考msdn:
http://msdn.microsoft.com/zh-cn/library/system.media.soundplayer.playsync(VS.80).aspx

.net 2.0 SoundPlayer类的
Play方法:使用新线程播放 .wav 文件,如果尚未加载 .wav 文件,则先加载该文件。
PlaySync 方法:使用用户界面 (UI) 线程播放 .wav 文件,如果尚未加载 .wav 文件,则先加载该文件。

System.Media.SoundPlayer s = new SoundPlayer();
s.SoundLocation = 声音文件路径;
s.LoadAsync(); //加载声音文件
//判断声音文件播放的次数,大于设置的重复播放次数则退出
if ( n<5)
  {
    for (int i = 0; i < mTimes; i++)
       {
          s.PlaySync();
          n++;
        }//end for (int i = 0; i < mTimes; i++)
    //停止播放
    s.Stop();
   //释放资源
   s.Dispose();
 }//end if (mTimes<5)

6.性能问题: if和for一起使用时将if放在外层,避免不必要的循环
7.变量A、B,不增加第三个变量如何交换A和B的值  
  A=A+B;  
  B=A-B;  
  A=A-B; 

8.排序算法
参考:http://www.cnblogs.com/JimmyZhang/archive/2008/10/02/1303137.html
http://www.cnblogs.com/welland/archive/2008/03/20/1114749.html

9.C#试题
http://www.cnblogs.com/temptation/category/92669.html?Show=All

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值