博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试的一道机试题: 排序 难度(**)
阅读量:4121 次
发布时间:2019-05-25

本文共 1647 字,大约阅读时间需要 5 分钟。

题目:插入数据,并排序

要求: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、随机插入不重复数据

      for(i=0;i<100;i++)
           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了。

转载地址:http://ggspi.baihongyu.com/

你可能感兴趣的文章
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
MySQL-分布式架构-MyCAT
查看>>
设计模式六大原则(6):开闭原则
查看>>
阿里面试总结--JAVA
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>
【设计模式】—-(2)工厂方法模式(创建型)
查看>>