蓝桥杯—串逐位和(给定一个由数字组成的字符串,得到它的各个数位的和)
来源:互联网 发布:node即学即用 编辑:程序博客网 时间:2024/05/22 17:45
题目要求如下:
串逐位和
给定一个由数字组成的字符串,我们希望得到它的各个数位的和。比如:“368” 的诸位和是:17
这本来很容易,但为了充分发挥计算机多核的优势,小明设计了如下的方案:
int f(char s[], int begin, int end)
{
int mid;
if(end-begin==1) return s[begin] - '0';
mid = (end+begin) / 2;
return ____________________________________; //填空
}
int main()
{
char s[] = "4725873285783245723";
printf("%d\n",f(s,0,strlen(s)));
return 0;
}
你能读懂他的思路吗? 请填写划线部分缺失的代码。
注意:只填写缺少的部分,不要填写已有代码或任何多余内容。
思路:
1. 通过查看函数int f(char s[], int begin, int end),很容易知道子函数需要使用递归来求解。
2. 小知识补充,比如字符串s[end],end是数组长度,但是字符串里面的内容只填充到s[end-1],字符数组最后一个元素默认填充‘\0’,即s[end]=‘\0’。
源程序如下:
<span style="font-size:14px;">// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<stdio.h>#include<string.h>int f(char s[], int begin, int end){int mid;if (end - begin == 1)return s[begin] - '0';mid = (end + begin) / 2;return f(s, begin, mid) + f(s, mid , end);}int _tmain(int argc, _TCHAR* argv[]){char s[] = "4123";printf("%d\n", f(s, 0, strlen(s)));getchar();return 0;}</span>
结果解析:
字符串s[]="4123",strlen(s)的返回结果为4.所以形参begin=0,end=4。
第一次调用函数int f(char s[], int begin, int end)。mid=(4+0)/2=2,所以return后面的语句f(s, begin, mid) + f(s, mid , end);其实为f(s,0, 2) + f(s, 2, 4)。
f(s,0, 2) ,截取了字符串s的前两个元素,s[0],s[1]。
f(s, 2, 4),截取了字符串s的后两个元素,s[2],s[3]。
后面的步骤类似。注意思路中的第二条即可。
注:本例中的程序在VS2013中通过了编译、运行。
1 0
- 蓝桥杯—串逐位和(给定一个由数字组成的字符串,得到它的各个数位的和)
- 对于给定的一个字符串,统计其中数字字符出现的次数。输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
- 给定一个字符串s由大小写字母和空白字符组成,返回字符串中最后一个字的长度。 如果最后一个字不存在,则返回0。
- 别样的判断一个字符串是否只由数字组成
- 匹配一个字符串,它由0、1、2组成,并且中间没有两个相邻的数字是相同的(比如,匹配1232101210321020,而不匹配1100123)
- java__给定由大写,小写字母和空格组成的字符串,返回 最后 一个单词的长度。 如果输入中不存在单词,返回 0。
- 由数字组成的两个字符串求和
- 0059 给定一些值和一个要组成的数字,求总的组合数(遍历解答树)
- 阿里校招笔试——给定一个字符串S和有效单词的字典D,请确定可以插入到S中的最小空格数,使得最终的字符串完全由D中的有效单词组成,并输出解。
- python实现给定一个列表,输出由各个位置除了自身元素外所有元素乘积组成的列表
- (hdu step 1.2.8)Specialized Four-Digit Numbers(求一个数字各个数位上数字的和)
- C#--输入一个由若干字符组成的字符串,输出其中的大写字母、小写字母、数字和其他字符的个数。
- 有一个由0和1组成的数组。 用给定的m 0和n 1来形成的最大字符串数量。每个0和1最多可以使用一次。
- 一个只由字母数字字符和破折号组成的字符串S. 该字符串被N个破折号分成N + 1个组。 给定数字K,使得每个组包含完全K个字符,除了第一个组可能少于K
- 幸运数4&7:给定正整数n,求不大于n的仅由4和7组成的数字的个数
- 给定一个数组和一个数字,给定的数组里是否存在两个数字之和等于给定的数字
- java得到指定位数随机密码(由数字,区分大小写的字母组成)
- 一个三位自然数正好等于它各数位上的数字和的18倍。这个三位自然数是几?
- Android时钟控件
- OpenCV解析SVM
- Tomcat+Spring web不能引入jquery
- 浙大PAT 1063
- OC笔记-贝塞尔曲线的应用
- 蓝桥杯—串逐位和(给定一个由数字组成的字符串,得到它的各个数位的和)
- Uva548——Tree
- PAT-1046划拳
- Linux 内存机制原理物理内存,Cache化,Buffer,Swap关系
- Spark学习笔记8-搭建spark的HA(用zookeeper实现spark的高可用)
- iOS 运行时2
- python中的文件
- Android性能优化典范(二)
- 分布式文件存储FastDFS(六)FastDFS多节点配置