百度面试题找到满足条件的数组

给定函数d(n)=n+n的各位之和,n为正整数,如d(78)=78+7+8=93。这样这个函数可以看成一个生成器,如93可以看成由78生成。

定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出1至10000里的所有符合数A定义的数。

回答:

申请一个长度为10000的bool数组,每个元素代表对应的值是否可以有其它数生成。开始时将数组中的值都初始化为false。

由于大于10000的数的生成数必定大于10000,所以我们只需遍历1到10000中的数,计算生成数,并将bool数组中对应的值设置为true,表示这个数可以有其它数生成。

最后bool数组中值为false的位置对应的整数就是不能由其它数生成的。

下面是我写的代码。

#include<iostream>

using namespace std;

void SCS(int n)

{

int i;

bool *a=new bool[n+1];

memset(a,false,n+1);

int m=0,s=0,p=0,q=0;

for(i=1;i<=n;i++)

{

m=i%10;

p=(i/10)%10;

q=(i/100)%10;

s=(i/1000)%10;

if(i+m+p+q+s<=n)

{

a[i+m+p+q+s]=true;

}

}

for(i=0;i<=n;i++)

{

if(a[i])

cout<<i<<endl;

}

}

int main()

{

int n;

cout<<"please cin the max num:"<<endl;

cin>>n;

SCS(n);

return 0;

}

时间: 2024-10-13 22:25:15

百度面试题找到满足条件的数组的相关文章

偶然在博客中见对百度一个面试题的探讨,写些自己的看法以及指出探讨中不对的观点:百度面试题:求绝对值最小的数 有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现 例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。

今天申请了博客园账号,在下班后阅览博客时发现了一个关于百度面试题探讨的博客(其实是个很基础的问题),此博客url为:http://www.blogjava.net/nokiaguy/archive/2013/01/30/394920.html 其中下面有人评论为: 有序列表查找显然二分啊,博主貌似对java的arrays和collections不是很熟. private static int getMinAbsoluteValue(final int[] source) { int index

算法--两道百度笔试题

算法--两道百度笔试题 今天看到一位园友写了一篇关于百度的面试题的博客,成了评论头条,再下看了一下,非常感兴趣,那位博主的算法能力跟我一样需要提高,估计他的功力还在我之下,所以再下不才,在这里把自己的源码贴出来. 百度面试题(一):假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数和正数间元素相对位置不变.时空复杂度要求分别为:o(n)和o(1).          其实开始的时候我也是一头雾水,在纸上画画之后发现,其实就是一道变形的插入排序.幸运的是

百度笔试题:malloc/free与new/delete的区别(转)

百度笔试题:malloc/free与new/delete的区别 相同点:都可以申请动态内存和释放内存. 不同点: (1) 操作对象有所不同: malloc和free是C/C++的标准库函数,new和delete是C++的运算符.对于非内部数据类的对象而言,光用malloc/free 无法满足动态对象的要求.对象在创建时要自动执行构造函数,对象消亡之前要自动执行析构函数,malloc和free是库函数而不是运算符,不在编译器的控制权限之内,不能够把执行构造函数和析构函数的任务强加给malloc/f

当update的查询条件是数组的时候,upsert会失效

不管是findOneAndUpdate还是update方法,只要他们的查询条件是数组,upsert就会失效,比如: //这段代码只会更新已存在的数据,不存在的不会插入 tagModel.update({name:{$in:oldTags}},{$inc:{total:1}},{multi:true,upsert:true},function(err){ if(err) return console.log(err) }) //只有根据具体的字段值查询时upsert才会生效 tagModel.up

回顾面试题:计算两个数组交集

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

编程之美-2.8 找到符合条件的整数

一.问题描述 任意给定一个正整数N,求一个最小正整数M(M>1),使得N*M的十进制形式只含1和0. 比如 N=99,M=1 122 334 455 667 789 ,N*M=111 111 111 111 111 111; M就是当N=99时,符合条件的数 二.解题思路 考虑将问题转化为:找只含有0和1的能被N整除的最小正整数.可以看出这是和原问题等价的. 那么需要将0和1组成的所有数从小到大遍历吗? 这样的话,如果寻找的数是k位,则需要搜索2k-1个数才能得到结果. 这里采用的方式是在计算中

2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小。

2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小. 我的大致思路是把这个整型数组转换成String数组,然后通过String类的compareTo方法对这个数组进行第一次排序,排序得到的结果恰好是按字典序排序,而字典序又恰好是数字从0-9的顺序,恰好符合这个要求.最后进行检验下,有的可能需要调换下顺序使得数最小. package com.cn.qunar.test; /** * @author 刘利娟 [email protected] * @

百度面试题(总结+更新)

关于百度面试题我现在的感觉是用不上很深的算法,但是思路很灵活,前边已经我已经贴出了5种解法的源代码,本来以为可以到此收尾,今天又有一位同学说了一种思路比较奇怪但是符合题意的方法..请看关于淘汰85%面试者的百度开发者面试题的看法的评论,@apollokk . 后边我也说过几种优化后的方法,如果你还没有看可以看一下百度开发者面试题(优化)这篇文章,关于它的总结你可以参看:百度开发者面试题(总结),当然本问还是要把apollokk的方法的完整代码贴出了,由于思路不难,我就不多说废话了(顺便说一下,输

中文分词算法-百度面试题

题目: 给定一个字符串, 一个数组,判断这个字符串能否被分隔成字典里的一个个单词. 用动态规划算法 我面试时写的是下面的代码 public static boolean divied2(String s,String[] dict){ boolean result=false; if(s.length()==0) return true; for (int i = 0; i < dict.length; i++) { int index=s.indexOf(dict[i]); if (index