C 解决百度知道的一个高中题
前言
今天看见一道百度知道上提问,是这样的.
仔细算了一下, 花了30min.才整出来了,估计现在回去参加高考,数学及格都悬.有时候想做这样的题有什么用,
学这些东西有什么意义,在这种方面浪费时间有什么值得的.
后来想出来,
开心就好!
想太多,考虑太多心累.我们开心就好.
正文
第一部分 从代码说开来
采用的主要思路是穷举法,穷举完之后,再判断. 思考了一下,主要用 char str[5]; 保存这个这个串. 采用下面函数检测这个串
是否是想要的串
- #inclue <stdbool.h>
- // 串检测函数
- bool
- isaa(char str[], int len)
- {
- int i = ;
- while(++i < len)
- if (str[i] == 'a' && str[i - ] == 'a')
- return true;
- return false;
- }
效率上也没深入搞了,追求能用就行了.
那怎么构建这个 char str[5] 呢. 这里原本采用 5层for,这直接pass了,首先一条准则, C程序开发一定要记住,或者程序员也要记住
- /*
- 用不用goto取决你的业务复杂度
- */
- // 但是你一定不要用 超过三层的 循环,那种代码写出来后要打自己脸.
.后面采用 递归搞了一下, 如下
- //采用递归算法穷举
- void
- dgaa(char str[],int len,int idx, int *psum, int *pcut)
- {
- if (len > idx) {
- str[idx] = 'a';
- dgaa(str, len, idx + , psum, pcut);
- str[idx] = 'b';
- dgaa(str, len, idx + , psum, pcut);
- str[idx] = 'c';
- return dgaa(str, len, idx + , psum, pcut);
- }
- ++*psum;
- *pcut += isaa(str, len);
- }
最后需要 return,因为到这里就结束了,不能再往下了,否则重复计数了. 大家有好方法可以分享.
到这里一切都准备妥当了. 完整代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- // 串检测函数
- bool isaa(char str[], int len);
- //采用递归算法穷举
- void dgaa(char str[], int len, int idx, int *psum, int *pcut);
- /*
- 上面函数的简化宏, 这里 用法是
- int psum = 0, pcut = 0;
- char str[5];
- int cut = DGAA(str);
- */
- #define DGAA(str, sum, cut) \
- dgaa(str, sizeof(str)/sizeof(*str), , &sum, &cut)
- /*
- * 这里处理一个问题
- * 一个由abc组成的五位字符串,至少包含 一个连续aa的串有多少个.
- *
- */
- int main(int argc, char* argv[])
- {
- int sum = , cut = ;
- char str[];
- DGAA(str, sum, cut);
- printf("所要找的所有串:%d个, 至少出现一次aa的串有 %d 个!\n",sum, cut);
- return ;
- }
- // 串检测函数
- bool
- isaa(char str[], int len)
- {
- int i = ;
- while(++i < len)
- if (str[i] == 'a' && str[i - ] == 'a')
- return true;
- return false;
- }
- //采用递归算法穷举
- void
- dgaa(char str[],int len,int idx, int *psum, int *pcut)
- {
- if (len > idx) {
- str[idx] = 'a';
- dgaa(str, len, idx + , psum, pcut);
- str[idx] = 'b';
- dgaa(str, len, idx + , psum, pcut);
- str[idx] = 'c';
- return dgaa(str, len, idx + , psum, pcut);
- }
- ++*psum;
- *pcut += isaa(str, len);
- }
我们直接编译链接一下
- gcc -g -Wall -o aa.out aa.c
总的运行结果如下:
答案是 至少出现一次aa的串有 79 个.
第二部分 从更高观点上分析这个问题
采用思路就是简单的数学集合分析.
1) . abc 组成 长度为 5的串
一共有 3^5 = 81 x 3 = 243
2) . 没有出现过 aa连续的串个数
A) 串中没有a
2^5 = 32
B) 串中只有一个a
首先剩下4个位置 2^4 = 16 后面 一个a 插入 到 x|x |x |x |x
x的位置 有 C(1,5) = 5种,一共有 16 x 5 = 80种
C) 串中有两个a x | x | x | x 左边x的位置选出2个 插入 aa
一共有 2^3 x C(4,2) = 8 x 4 x 3 / 2 = 48种
D) 串中有3个 a 就是这样情况 a | a | a
只有 2^2 = 4四种情况
综上 A,B,C,D 一共有 32 + 80 + 48 + 4 = 112 + 52 = 164种
综上1) 2) 得到至少一个aa连续出现的5位串 个数为
243 - 164 = 79 种
问题已经解决. 欢迎大家给出更巧妙的方法分享.
后记
到这里说结束了, 错误是难免的,提出来一定改. 祝今天大家包括自己愉快, 以后的生活多一点行动,少一点
犹豫,关键是开心就好.O(∩_∩)O哈哈~
C 解决百度知道的一个高中题的更多相关文章
- [转]解决百度统计 gzdecode(): insufficient memory
百度统计API gzdecode($preLogin->retData, strlen($preLogin->retData)) 这段代码会造成一个PHP警告内存不足,解决办法只要换个解压 ...
- PHP解决多进程同时读写一个…
原文地址:PHP解决多进程同时读写一个文件的问题作者:陌上花开 首先PHP是支持进程的而不支持多线程(这个先搞清楚了),如果是对于文件操作,其实你只需要给文件加锁就能解决,不需要其它操作,PHP的fl ...
- 解决ul里最后一个li的margin问题
在html+css布局里ul>li挺常用的,在群里(WEB前端开发 458732443)总有新手问怎么解决li的最后一个margin值的问题.下面介绍一下,大神请不要拍砖. 先看两个demo,你 ...
- 完美快速解决百度分享不支持HTTPS的问题
百度分享不支持HTTPS这件事由来已久,我之前向百度分享提交过这个问题,无果!但近期themebetter主题用户咨询的比较多,我们就总结了解决方案. 第一步:下载百度分享必备文件 点此下载stati ...
- ssh框架从页面传中文发生乱码时怎么解决,就是添加一个字符编码拦截器。用springframework自带的便可
ssh框架从页面传中文发生乱码时怎么解决,就是添加一个字符编码拦截器.用springframework自带的便可
- 解决百度Ueditor编辑器表格不显示边框问题
一.主要内容 CMS使用百度Ueditor编辑器中的表格功能,在编辑模式下可以正常显示边框,而文章发布之后表格不能显示边框.本博文经过查阅相关资料,最终解决了该问题. 二.使用平台 1. dedecm ...
- 解决百度BMR的spark集群开启slaves结点的问题
前言 最近一直忙于和小伙伴倒腾着关于人工智能的比赛,一直都没有时间停下来更新更新我的博客.不过在这一个过程中,遇到了一些问题,我还是记录了下来,等到现在比较空闲了,于是一一整理出来写成博客.希望对于大 ...
- 使用fabric解决百度BMR的spark集群各节点的部署问题
前言 和小伙伴的一起参加的人工智能比赛进入了决赛之后的一段时间里面,一直在构思将数据预处理过程和深度学习这个阶段合并起来.然而在合并这两部分代码的时候,遇到了一些问题,为此还特意写了脚本文件进行处理. ...
- 完美解决百度网盘、浏览器下载限速问题proxyee-down(附带win破解版云盘)
win版破解云盘 下载: <PanDownload> 使用文档: <PanDownload使用> Mac方法 限速.限速! 平时下载东西限速倒无所谓,遇到急一点的.盯着80km ...
随机推荐
- VS error retrieving information from user datastore
搭建好VS2005+PB6.0的开发环境后,新建MFC智能设备应用程序工程出错,错误信息如下: error retrieving information from user datastore 很奇怪 ...
- bzoj1003 [ZJOI2006]物流运输
1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6300 Solved: 2597[Submit][Stat ...
- php 调用.net的webservice 需要注意的
首先 SoapClient类这个类用来使用Web services.SoapClient类可以作为给定Web services的客户端.它有两种操作形式:* WSDL 模式* Non-WSDL 模式在 ...
- 再看.net本质
1.[资源的地址-通用资源标识符] 我们在地址栏中输入的内容称为通用资源标识符(Universal Resource Identifier,URI),它有很多种形式,在Web中我们通常使用称为统一资源 ...
- Ax Lookup Form
Reference: Class\sysLookupTable 1. 用临时表构造Lookup下拉结果,sysLookupTable有一个parmTmpBuffer方法,表明传入展示的结果集是临时表 ...
- APUE第一章_课后习题
/* 未完成的:1.5 不过在下文中已经给出了解答. */ 1.1 在系统上查证,除根目录外,目录.和..是不同的 ans:这个很容易,用vim打开.和..就可以看到区别. 1.2 分析程序清单1-4 ...
- jquery控制元素的淡入淡出切换
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Android IOS WebRTC 音视频开发总结(六十)-- 您为什么招不到适合的音视频人才
本文主要介绍音视频行业招聘现状,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 有过音视频人才招聘经验的应该都深有 ...
- Android IOS WebRTC 音视频开发总结(四五)-- ORTC背后的真相
本文主要介绍ORTC(Object Real-time Communication),支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. - ...
- 飞翔的圆(Flappy Bird)游戏源码
这个源码是一个不错的休闲类的游戏源码,飞翔的圆(Flappy Bird)游戏源码V1.0,本项目是一个仿Flappy Bird的小游戏,只不过是把Flappy Bird里面的鸟替换成了简单的圆.感兴趣 ...