NVDIA(英伟达)一道笔试笔试编程题

40 篇文章 0 订阅
26 篇文章 0 订阅

NVDIA(英伟达)一道笔试笔试编程题

Given an integer number N(n = m^2 - 1),

 print sequence 0, 1, 2, 3, ..., n,in below form. 

You can only use printf(C) or cout(C++). 

For example, given n = 24(5^2 - 1), the program should output
  0    1     2    3   4
15  16  17  18   5
14  23  24  19   6
13  22  21  20   7
12  11  10   9    8


1.  What memory & computation complexity of your algorithm?
  

      //你的算法的时间和空间的复杂度?


2.  Is there an algorithm to get O(1) of memory and O(n) of computation complexity
  //有没有空间复杂度为O(1),而时间复杂度为O(n)的算法?

分析:

  0   1     2    3  4
15   0    1    2   5
14   7    0    3   6
13   6    5    4   7
12 11 10    9   8

 1. 空间复杂度和时间复杂度都是O(n)的算法的实现如下:

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAX 100000

void screw(int*a, int n);
void printArray(int*a, int n);

int main(int argc, char* argv[], char* env[])
{
    int a[MAX] = {0,};
    int i;
    int n;

    for(i=1; i<10; i++) {
        n = i*i -1;
        screw(a, n);
        printArray(a, n);
    }
    
    return 0;
}


void screw(int* a, int n) {
    int m;
    int p;
    int q;
    int i;
    int j;
    int k;
    int base;

    m = (int)sqrt(n+1);
    q = 0;
    k = 0;

    for(p=m; p>0; p-=2) {
        base = m*q + q;

        //上边
        j=0;
        for(i=0; i<p; i++) {
          a[base+j*m+i] = k++;
        }

        //右边
        i=p-1;
        for(j=1; j<p; j++) {
            a[base+j*m+i] = k++;
        }

        //下边
        j=p-1;
        for(i=p-2; i>=0; i--){
            a[base+j*m+i] = k++;
        }

        //左边
        i=0;
        for(j=p-2; j>0; j--) {
            a[base+j*m+i] = k++;
        }

        q++;
    }
}

void printArray(int * a, int n) {
    int i;
    int m;

    m = (int)sqrt(n+1);

    for(i=0; i<=n; i++) {
        if(i%m == 0) printf("\n");
        printf("%2d ", a[i]);
    }
    printf("\n");

}

运行结果:

the result

2.是否有空间复杂度为O(1), 计算法复杂度为O(n)的算法?

 //怎么求逆函数,思考中ing。。



 



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
英伟达(NVIDIA)是一家全球知名的计算机技术公司,专注于设计和制造图形处理器(GPU)和系统芯片。该公司在中国的发展也非常迅速,因此它在校园招聘中经常举行面试和笔试,以吸引高素质的学生加入他们的团队。 在NVIDIA的ic设计校招笔试中,通常会包括以下内容: 首先,会涉及数字电路设计与验证的基础知识。学生需要了解数字系统的基本概念和原理,掌握逻辑门电路的设计与实现,熟悉时序逻辑与组合逻辑的区别与应用。此外,对于常用的数字设计工具和方法也需要有一定的了解,如Verilog和VHDL等高级硬件描述语言。 其次,对于FPGA的应用也会是一个重点。FPGA是现代数字设计中常用的工具,因此学生需要具备对FPGA的理论知识和实际操作经验。这将包括FPGA的基本结构和原理,以及如何使用市场上常见的FPGA开发板进行设计和验证。 接下来,学生可能会面临一些与数据结构和算法相关的题目。因为数字电路设计和验证中广泛使用到了数学和计算机科学的概念和方法,所以学生需要具备一定的编程算法能力。对于这一部分,可能会涉及到树、图、排序等常见数据结构和算法的原理和实现。 最后,还会针对英伟达公司的特点,考察学生对公司产品和技术的了解程度。学生需要对NVIDIA的GPU和系统芯片有一定的了解,了解其核心技术和应用领域,对于公司的发展方向和市场需求也要有一定的了解。 总体来说,英伟达的ic设计校招笔试题目会对学生的综合能力进行考察,涵盖了数字电路设计与验证、FPGA应用、数据结构与算法以及对公司产品和技术的了解。对于有志于从事芯片设计工作的学生来说,这些题目既考察了基础知识的掌握,又考察了问题解决的能力和对行业发展的认知,对于帮助学生进入芯片设计领域有着重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值