码迷,mamicode.com
首页 > 其他好文 > 详细

塞码考试系统里的输入,到底是怎么回事

时间:2017-04-03 12:41:06      阅读:466      评论:0      收藏:0      [点我收藏+]

标签:测试   就会   http   解决   class   mile   测试数据   color   sort   

前言:最近参加了几场实习生笔试,编程题全军覆没,但是本地明明就是对的啊!!今天花了一早上,终于弄明白是怎么回事了,和我有同样情况的童鞋可以参考,也许可以解决你的困惑!

重点:我一直理解错的地方就是,我以为是给我一项(一项表示一次用例的所有数据)数据,我输出一项结果就可以。然而并不是这样!很多题目是一次性给你多项数据,也就是说要求是:一次性给你所有的测试数据,你依次把你的结果全部输出来。举个例子:

下面是塞码网上京东2016的一道真题(题目可以不用认真看,看输入的地方)

技术分享

假设我定义第一行输入为n,第二行为arr,我以前都是这样写的(错误的写法):

技术分享

于是结果就是不对,反正怎么调都不对!我们必须这样写(正确的写法):

技术分享

也就是必须用循环来读取输入,且主要代码必须在循环里,否则系统无论给多少项数据,按错误的写法永远只会有一个输出。这个输出对于第一项数据来说是对的,但系统想要的应该是多项输出,所以就会被判为错误。

上面京东的题目,大家可以去试一试,http://exercise.acmcoder.com/quesexcuse?paperId=176中的第26题。

错误的代码:

var n=parseInt(read_line());
var arr =str.split(" ");
fun(n,arr);
//以下代码不变
function fun(n,arr){
 var dong = arr[0];
var count=0;
arr.sort(function(a,b){return a-b;});
var index = arr.indexOf(dong);
while(index<n-1){
        arr[n-1]--;
        dong++;
        arr[index]=dong;
        count++;
        arr.sort(function(a,b){return a-b});    
       index =arr.indexOf(dong);
}
  print(count);
  
}

结果如下:

技术分享

可以看出,系统给了我很多项数据,我的输出只有一个(其实这个输出结果和刚刚题目上第一个例子的结果是一样的,说明我思路没错),所以判定错误。

正确的代码:

var n;
while(n=parseInt(read_line())){
var arr = read_line().split(‘ ‘);
  fun(n,arr);
}
//以下代码不变
function fun(n,arr){
  var dong = arr[0];
var count=0;
arr.sort(function(a,b){return a-b;});
var index = arr.indexOf(dong);
while(index<n-1){
        arr[n-1]--;
        dong++;
        arr[index]=dong;
        count++;
        arr.sort(function(a,b){return a-b});    
       index =arr.indexOf(dong);
}
  print(count);
  
}

结果如下:

技术分享

只改变了输入的方式,结果就对了!

苍天啊,我终于弄明白了,简直想哭技术分享,那么多笔试全部掉坑里了。如果你和我遇到一样的情况,希望对你有所帮助!

塞码考试系统里的输入,到底是怎么回事

标签:测试   就会   http   解决   class   mile   测试数据   color   sort   

原文地址:http://www.cnblogs.com/youhong/p/6661664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!