1. 请按顺序写出打印结果,并说明原因。
var name = 'global';
var obj = {
name: 'local',
foo: function(){
this.name = 'foo';
}.bind(window)
};
var bar = new obj.foo();
setTimeout(function() {
console.log(window.name);
}, 0);
console.log(bar.name);
var bar3 = bar2 = bar;
bar2.name = 'foo2';
console.log(bar3.name);
答案:foo, foo2, global
解析:
考察点3个:
1、输出顺序主要考察:Event Loop;
2、第一个和第三个输出考察:this指针;
3、第二个输出考察:引用类型赋值
class A {
String i = "op";
void func(String s) {
s = ""+9;
}
static void test() {
A a = new A();
a.func(a.i);
}
}
问:
1. i,s,a都在栈中,new出来的对象A在堆上。
2. 执行完后a.i的值还是字符串op。
3. 请写出如下代码运行后产生的结果,并给出解释,说明结果是如何得出的。
setTimeout(() => console.log('a'));
Promise.resolve().then(
() => console.log('b’);
).then(
() => Promise.resolve('c').then(
(data) => {
setTimeout(() => console.log('d'));
console.log('f');
return data;
}
)
).then(data => console.log(data));
答案:bfcad
考察点:主要考察js event loop以及宏任务和微任务;
4. 请写出下面ES6代码编译后所生成的ES5代码;
class Person {
constructor (name) {
this.name = name;
}
greet () {
console.log(`Hi, my name is ${this.name}`);
}
greetDelay (time) {
setTimeout(() => {
console.log(`Hi, my name is ${this.name}`);
}, time);
}
}
var Person = (function () {
function Person (name) {
this._name = name;
}
Person.prototype.greet = function () {
console.log(“Hi, my name is “ + this._name);
}
Person.prototype.greetDelay = function (time) {
var _this = this;
setTimeout(function () {
console.log(“Hi, my name is “ + _this.name);
}, time);
}
})();
5. 形如1, 1, 2, 3, 5, 8, 13, 21, 34, 55的数列,后一位是前面两位相加(斐波那契数列),写出函数要求找到第 N 位是多少,如:fib(3) => 3 , fib(5) => 8, 要求时间复杂度为O(n)。
function fib(n){
let top=1,bottom=0,res=0
for(let i=0;i<n;i++){
res=top+bottom
bottom=top
top=res
}
return res
}
#include
using namespace std;
long long feb(int n)
{
long long a=1,b=1,c=1;
int i;
for (i=0;i<n-1;i++)
{
c=a+b;
a=b;
b=c;
}
return c;
}
int main()
{
int n;
cin>>n;
cout<<feb(n)<<endl;
return 0;
}
6. 近期某商场由于周年庆,开启了“0元购”活动。活动中,消费者可以通过组合手中的代金券,实现0元购买指定商品。
聪明的小团想要用算法来帮助他快速计算:对于指定价格的商品,使用代金券凑出其价格即可,但所使用的代金券总面额不可超过商品价格。由于代金券数量有限,使用较少的代金券张数则可以实现价值最大化,即最佳优惠。
假设现有100元的商品,而代金券有50元、30元、20元、5元四种,则最佳优惠是两张50元面额的代金券;而如果现有65元的商品,则最佳优惠是两张30元代金券以及一张5元代金券。
请你帮助小团使用一段代码来实现代金券计算。
输入描述:
多组输入输出,读到s=0时结束
输入可以有多个测试样例,每个测试由两行组成。
其中第一行包含一个整数P,表示商品的价格,1≤P≤10000;输入P为0时表示结束。
第二行包含若干整数,使用空格分割。其中第一个整数N(1≤N≤20)表示有多少种代金券,其后跟随M个整数,表示手中持有的代金券面额(1≤N≤1000),每种代金券数量不限。
输出描述:
找到最少张数的代金券,使其面额恰好等于商品价格。输出所使用的代金券数量;
如果有多个最优解,只输出其中一种即可;
如果无解,则需输出“Impossible”。
示例1
输入
65
4 50 30 20 5
0
输出
3
链接:https://www.nowcoder.com/questionTerminal/5d2405da8d364eafbaca1de9bc2a0d4e
来源:牛客网
while(true){
let nums = parseInt(readline())
if(nums === 0 ) break
let coins = readline().split(" ").map(Number).slice(1)
console.log(fn(coins,nums))
}
function fn(coins,nums){
let dp = new Array(nums+1).fill(Infinity)
dp[0] = 0
for(let i = 1;i<=nums;i++){
for(let coin of coins){
if( i >= coin ){
dp[i] = Math.min(dp[i],dp[i-coin]+1)
}
}
}
return dp[nums] === Infinity ? 'Impossible' : dp[nums]
}
链接:https://www.nowcoder.com/questionTerminal/5d2405da8d364eafbaca1de9bc2a0d4e
来源:牛客网
#include
using namespace std;
int main(){
int flag=1;
while(flag){
int cash;
cin>>cash;
if(cash==0){
break;
}
int num;
cin>>num;
int *coins=new int[num];
int count=0;
int size=num;
while(num--){
cin>>coins[count];
count++;
}
for(int p=0;p<size;++p){
for(int q=0;q<size-p-1;++q){
if(coins[q]>coins[q+1]){
swap(coins[q],coins[q+1]);
}
}
}
int *F=new int[cash+1];
for(int i=0;i<=cash;++i){
F[i]=cash+1;
}
F[0]=0;
for(int j=0;j<=cash;++j){
for(int k=0;k<size;++k){
if(j<coins[k]){
break;
}
else{
F[j]=min(F[j-coins[k]]+1,F[j]);
}
}
}
if(F[cash]==cash+1){
cout<<"Impossible"<<endl;
}
else{
cout<<F[cash]<<endl;
}
}
}
7. 给定一个包含非负整数的 M x N 迷宫,请找出一条从左上角到右下角的路径,使得路径上的数字总和最小。每次只能向下或者向右移动一步。
小团在一次星际旅行中,耗尽了飞船的能量,迷失在了空间魔方中,空间魔方中有NNN个能量粒子。美团云AI迅速帮小团分析出了空间魔方的能量分布图。
已知小团的飞船被困在能量值最高的点,能量值最高点有且只有一个。飞船每到达一个能量粒子就会吸收对应粒子的能量,该粒子会坍缩成小黑洞,飞船不可到达。小团驾驶的飞船只能从高能粒子驶向低能粒子,且每次只能从6个方向中选择一个前进。(±x,±y,±z)。
请帮助帮小团吸收最高的能量值。
https://www.nowcoder.com/test/question/done?tid=31652586&qid=894519#summary