码迷,mamicode.com
首页 > 移动开发 > 详细

小米13笔试编程题 1

时间:2014-07-28 14:35:13      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:style   blog   java   color   os   io   for   div   

数组乘积(15分)
输入:一个长度为n的整数数组input
输出:一个长度为n的整数数组result,满足result[i] = input数组中除了input[i]之外所有数的乘积(假设不会溢出)。比如输入:input = {2,3,4,5},输出result = {60,40,30,24}
程序时间和空间复杂度越小越好。
C/C++:
int *cal(int* input , int n);

Java:
int[] cal(int[] input);

方法1:算出数组所有元素乘积sum,再逐个除以对应元素sum/input[i],如下

#include<iostream>
using namespace std;

    int *cal(int* input , int n){
    int sum=1;
    int *result=new int[n];
    for(int i=0;i<n;i++){
        sum=sum*input[i];
    }
    cout<<sum<<endl;
    for(int j=0;j<n;j++){
       result[j]=sum/input[j];
    }
    return  result;
}
    
int main(){
    int input[]={2,3,4,5};
    int L=sizeof(input)/sizeof(input[0]);//计算数组长度
    int *re=cal(input,L);
    cout<<re[0]<<re[1]<<re[2]<<re[3]<<endl;//字符数组可直接输出数组名,其他的输出地址
}

 

方法2:得出数组中该元素之前所有元素乘积,再用循环实现,对于输入2,3,4,5 即先得到5,2,2*3,2*3*4(最后一个元素置首位),再从元素末尾的前一个元素开始计算(原理是用该元素前面所有元素乘积,再乘以该元素后面所有元素乘积)。

#include<iostream>
using namespace std;

int *cal(int* input , int n)  
    {  
        int i ;  
        int *result = new int[n];  
        result[0] = 1;  
        for(i = 1 ; i < n ; ++i)  
            result[i] = result[i-1]*input[i-1];  
        result[0] = input[n-1];  for(i = n-2 ; i > 0 ; --i)  
        {  
            result[i] *= result[0];  //reslut[i]中存的是当前元素前面所有的乘积;result[0]是当前元素后面所有的乘积,将二者相乘即可
            result[0] *= input[i];  
        }  
        return result;  
    }  
int main(){
    int input[]={2,3,4,5};
    int L=sizeof(input)/sizeof(input[0]);//计算数组长度
    int *re=cal(input,L);
    cout<<re[0]<<re[1]<<re[2]<<re[3]<<endl;//字符数组可直接输出数组名,其他的输出地址
}
reslut[i]中存的是当前元素前面所有的乘积;result[0]是当前元素后面所有的乘积,将二者相乘即可

 

小米13笔试编程题 1,布布扣,bubuko.com

小米13笔试编程题 1

标签:style   blog   java   color   os   io   for   div   

原文地址:http://www.cnblogs.com/xsfantasy/p/3872521.html

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