笔试算法题(15):-1到N中包含1的数字的个数 & 连续和为N的序列
出题:输入一个整数N,求从1到N这N个整数的十进制表示中‘1’出现的次数;
分析:
- 从左向右处理string表示的数字;当前数字长度为n,判断最左边一位数字字符;
- 如果是0,则直接递归下一位;
- 如果是1,则计数有两个来源,一个是n位数数字(实际就是除去最高位之后的数字大小,加上1,当其余位全部为0的时候),另一个是n-1,n-2,……,1位数字,使用SpecialPower可以计算;
- 如果是其他数字,则计数有两个来源,一个是n,n-1,n-2,……,1位数字,使用SpecialPower可以计算,另一个是去除最高位之后的数字大小;
解题:
int NonRecursiveStrInt(char *target) {
int sum=;
char *index=target; while(*index != '\0') {
sum*=;
sum+=*index-'';
index++;
} return sum;
} int SpecialPower(int n) {
int sum=;
int product;
for(int i=;i<n;i++) {
product=;
for(int j=;j<i;j++) {
product=product*;
}
sum+=product;
}
return sum;
} int count1Decimal2(char *decimal,int n) {
if(*decimal == '\0') return ;
if(*decimal == '') return count1Decimal2(++decimal,n-);
if(*decimal == '')
return NonRecursiveStrInt(++decimal) + + SpecialPower(n-);
return SpecialPower(n) + count1Decimal2(++decimal,n-);
} int main() {
char *decimal="";
printf("\n%d\n",count1Decimal2(decimal,));
return ;
}
出题:输入一个正整数N,求所有和为N的连续正整数序列
分析:
- 橡皮筋解法,left和right为两端,当和小于N的时候右移right,当和大于N的时候左移left;
- 另外还有求等差数列和解法(2N的分解因子):a+(a+1)+……+(a+k)=N,则有a(k+1)+(k+1)k/2=N,则有(k+2a)(k+1)=2N,a和k需为整数,简单枚举即可;
解题:
int getSum(int start, int end) {
int sum=;
for(int i=start;i<=end;i++) {
sum+=i;
}
return sum;
}
/**
* left表示序列开始,right表示序列结束,
* 初始化left为1,right为2
* 每当找到一个序列之后,需要重新初始化left和right
* 连续和至少两个数,所以left的最大值不能大于(n+1)/2
* 当和小于n则增大left表示加入数字
* 当和大于n则增大right表示减去数字
* */
void SucceSum(int n) {
if(n<=) {
printf("\nn is less than 2\n");
return;
}
int left=;
int right=; int mark=(n+)/;
int temp;
while(left<mark) {
temp=getSum(left, right);
if(n < temp) {
left++;
} else if(n > temp) {
right++;
} else {
printf("new sequence: \n");
for(int i=left;i<=right;i++) {
printf("%d, ",i);
}
printf("\n");
left++;
right=left+;
}
}
}
笔试算法题(15):-1到N中包含1的数字的个数 & 连续和为N的序列的更多相关文章
- 笔试算法题(09):查找指定和值的两个数 & 构造BST镜像树
出题:输入一个已经升序排序的数组和一个数字:要求在数组中查找两个数,这两个数的和正好等于输入的那个数字,输出任意一对数字就可以,要求时间复杂度是O(n): 分析:对于升序排序的数组{…i…j…k…m… ...
- 前端如何应对笔试算法题?(用node编程)
用nodeJs写算法题 咱们前端使用算法的地方不多,但是为了校招笔试,不得不针对算法题去练习呀! 好不容易下定决心 攻克算法题.发现js并不能像c语言一样自建输入输出流.只能回去学习c语言了吗?其实不 ...
- 笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)
议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小) 分析: 算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法:使用显示下推栈存储快速排 ...
- 笔试算法题(33):烙饼排序问题 & N!阶乘十进制末尾0的个数二进制最低1的位置
出题:不同大小烙饼的排序问题:对于N块大小不一的烙饼,上下累在一起,由于一只手托着所有的饼,所以仅有一只手可以翻转饼(假设手足够大可以翻转任意块数的 饼),规定所有的大饼都出现在小饼的下面则说明已经排 ...
- 笔试算法题(47):简介 - B树 & B+树 & B*树
B树(B-Tree) 1970年由R. Bayer和E. Mccreight提出的一种适用于外查找的树,一种由BST推广到多叉查找的平衡查找树,由于磁盘的操作速度远小于存储器的读写速度,所以要求在尽量 ...
- 笔试算法题(26):顺时针打印矩阵 & 求数组中数对差的最大值
出题: 输入一个数字矩阵,要求从外向里顺时针打印每一个数字: 分析: 从外向里打印矩阵有多重方法实现,但最重要的是构建合适的状态机,这样才能控制多重不同的操作: 注意有四种打印模式(左右,上下,右左, ...
- 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所 ...
- 笔试算法题(32):归并算法求逆序对 & 将数组元素转换为数组中剩下的其他元素的乘积
出题:多人按照从低到高排成一个前后队列,如果前面的人比后面的高就认为是一个错误对: 例如:[176,178,180,170,171]中的错误对 为 <176,170>, <176,1 ...
- 笔试算法题(30):从已排序数组中确定数字出现的次数 & 最大公共子串和最大公共序列(LCS)
出题:在已经排序的数组中,找出给定数字出现的次数: 分析: 解法1:由于数组已经排序,所以可以考虑使用二分查找确定给定数字A的第一个出现的位置m和最后一个出现的位置n,最后m-n+1就是A出现的次数: ...
随机推荐
- 使用VS进行打包程序解决生成两个文件的问题(压缩后只有一个exe)
使用VS打包创建setup相信大家都挺熟的了,不熟的话网上也有很多,就不做介绍了,现在给大家写下怎么将生成的那些文件夹以及setup.exe和.msi 文件打包成一个exe 我们这里使用的是Winra ...
- asp.net mvc4 controller
controller返回几种返回结果
- Codeforces Round #259 (Div. 1)A(公式)
传送门 题意 给出m个面的骰子扔n次,取最大值,求期望 分析 暴力算会有重复,而且复杂度不对. 考虑m个面扔n次得到m的概率,发现只要减去(m-1)个面扔n次得到m-1的概率即可,给出example说 ...
- bzoj 1625: [Usaco2007 Dec]宝石手镯【背包】
裸的01背包 #include<iostream> #include<cstdio> using namespace std; int c,n,w,v,f[20001]; in ...
- 洛谷P2384 最短路(dijkstra解法)
题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你100000000000000000000000000000000000%10金币w ...
- B - Burning Midnight Oil CodeForces - 165B
One day a highly important task was commissioned to Vasya — writing a program in a night. The progra ...
- macbook 快捷键 home ...
home和end是fn+左右,ctrl+home和end是fn+cmd+左右
- 题解报告:hdu 2546 饭卡(01背包)
Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...
- Matlab实现Hough变换检测图像中的直线 分类: 图像处理 2014-06-14 22:07 641人阅读 评论(0) 收藏
Hough变换的原理: 将图像从图像空间变换至参数空间,变换公式如下: 变换以后,图像空间与参数空间存在以下关系: 图像空间中的一点在参数空间是一条曲线,而图像空间共线的各点对应于参数空间交于一点的各 ...
- SpringBoot_自定义配置属性
@ConfigurationProperties 在aplication.properties 中添加如下一段配置: mysql.jdbcName=com.mysql.jdbc.Driver mysq ...