题目:插入数据,并排序
要求:1、随机插入不重复数据
2、排序,并在排序中可以输入数据控制进程
话说这道题排序不成问题,要说难点的话也就出在上述两个要求上吧。当时机试的电脑是一台HP的笔记本,里面能用的编译器也就是Microsoft Visual Studio 2005,我先用上面附带的PlusEdit文本编辑器早早的编辑好了一下C代码。然后瞅瞅Microsoft Visual Studio 2005有没有工程能够编译代码的,由于从来没用过,短时间找不到。面试我的人上网找了Tubor C 2.0帮我应了下急。在这里感慨一下Tubor C 2.0调试代码真难用。
话归正传,讲一讲我如何解决上述两条要求的。
先看一下变量定义,如果有变量不清楚的话,可以到这儿查
int i, j, k;
int a[100];
int b[100];
int temp,temp1;
int flag=1;
int enquire=1;
1、随机插入不重复数据
b[i]=i;
//数组随机数赋值,0~99,并且不重复
srand((unsigned)time(NULL));
for(i=0;i<100;i++)
...{
j=99-i;
do...{
temp=rand();
}while(temp<0||temp>j);
a[i]=b[temp];
temp1=b[j];
b[j]=b[temp];
b[temp]=temp1;
}首先先定义一个同样大小的数组,赋值。注意这儿的所赋的值其实就是所有传递给目标数组的随机数的范围。我做好后,面试官问我,你做的随机数范围是0~99,那如果换个范围呢。我说,只要改变数组b的范围就行了。当然用我的方法还有一个附带的好处就是,即使随机数可能取的一样,赋值的数值也不会相同。
当时一直在想C里有没有取的随机数函数能限定范围的,打开头文件stdlib.h一看没有看到有这样的函数。于是用了一个do while循环给随机数函数取得值限定范围,貌似会影响效率的说。
2、排序,并在排序中可以输入数据控制进程

/**//*冒泡排序,并在每次循环输出中间结果后任意输入一个值,
1、如果介于该次循环与100之间的数,输出该值对应的循环中间结果。
2、如果输入-1,直接输出最终结果。
3、如果输入0,则程序停止运行。
4、如果输入其它数值,则输出下一次的循环中间结果。*/
for(i=99;i>=0;i--)
...{
for(j=0;j<i;j++)
...{
if(a[j]>a[j+1])
...{
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
if(enquire)
...{
printf(" Press any number to continue... ");
scanf("%d",&flag);
}
if(flag>100-i&&flag<100)
...{
enquire=0;
}else if(flag==-1)
...{
enquire=0;
}else if(!flag)
...{
exit(0);
}else
...{
enquire=1;
printf("%dth result ",100-i);
for(k=0;k<100;k++) 
...{
printf("%2d ",a[k]);
if((k+1)%10==0) printf(" ");
}
}
}
后来回到家,自己的电脑Visual Studio 2008上折腾这道题,Project types 选择Visual C++,新建Win32 Console Application项目。在Solusion Explorer的Resouce Files右键添加文件,文件后缀.c,编译运行,成功跳出黑框框。看来就不需要vc6.0了。
本文介绍了一种在C语言中实现随机数生成并确保其唯一性的方法,同时还包括了一个带有用户交互功能的排序算法。文章详细展示了如何通过随机数生成及排序过程中的用户输入来控制程序流程。
8万+

被折叠的 条评论
为什么被折叠?



