今天笔试的一道算法题,每次都吃后悔药,痛苦!

题目如下:

从1到100000的数中任意取出两个,然后将99998个数打乱,存入数组A[ ]中,问用一次遍历数组将这两个数找出来,允许使用不超过5个局部变量,不使用数组变量,还有不修改原数组的值。

刚开始想说用STL来实现,但是不知道哪根筋突然短路,觉得有点不妥是不是违背了题意的不改变数组的值,后采用了指针链表来实现,但是出于时间问题,最终还是没写出来。在回来的路上我和同学的讨论使我明白我开始的思路是对的,用STL来做容易,并且这也是C++笔试常考的点,我竟然忽略了,真的是一个超级大菜鸟。几次的C++笔试受挫,原本自信满满的C++能力一下被打入谷底,还以为自己做过几个VC的项目,会进行vc和matlab的混编,就能达到熟悉vc编程的程度,其实不然,自己基础知识实在太薄弱。每次笔试我都有深刻的感悟,那就是一个“悔”字,当初怎么没有好好抓抓基础呢,老师总是跟我们说学编程语言,你只要选做一小项目(例如什么管理系统之类)并且做好就能掌握其编程的精髓。也许,很快的我掌握了vc编程的概要,但是其中广泛的库,令人头疼的消息机制问题,一堆见着眼熟,在控件帮助下,一点,就会弹出的函数,使用无法很好掌握其精要。现在总结学习东西,不仅要一下广的学起,还要细的摸透,达到孰能生巧,游刃有余的地步(PS:真的不能在借用控件了,发现在自己真的好多函数写不出来),套用老孙的一句话,“革命尚未成功”,I must still work hard。

好了,上面牢骚了这么多,我把上题的主要代码献出(回寝室后悔之作):vector<int> vect;
 int val;
 vector<int>::iterator iter;
 int a[]={7, 4, 3, 5, 9, 6, 1,...};                  //打乱的99998个数
 for (val=0; val<99998; val++)
 {
  vect.push_back(a[val]);
 }
 for (int ix = 1; ix != 100000; ix++)
 {
  iter = find(vect.begin(), vect.end(), ix);
  if (iter==vect.end())
  {
   cout<<ix<<endl;
  }
  else
   continue;
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值