编程之美Q1
题目
和数书页有点类似,就直接数吧
- #include<iostream>
- using namespace std;
- class q1
- {
- public:
- size_t func(size_t num);
- };
- size_t q1::func(size_t num)
- {
- size_t count = 0, tmp;
- while(num)
- {
- tmp = num;
- while(tmp)
- {
- if(tmp%10 == 1)
- ++count;
- tmp = tmp/10;
- }
- --num;
- }
- return count;
- }
- int main()
- {
- q1 an;
- size_t num = 0;
- while(1)
- {
- cout<<"please input positive integer: ";
- cin>>num;
- cout<<num<<" to 0 include "<<an.func(num)<<" number 1 ."<<endl;
- }
- //num = 0xffffffff;
- //cout<<num<<" to 0 include "<<an.func(num)<<" number 1 ."<<endl;
- }
可循环输入,运行效果
显然,时间复杂度过高,一定有其他方法
- #include<iostream>
- using namespace std;
- class q1
- {
- public:
- size_t func(size_t num);
- size_t func1(size_t num);
- size_t equ(size_t befor, size_t num);
- };
- size_t q1::func(size_t num)
- {
- size_t count = 0, tmp;
- while(num)
- {
- tmp = num;
- while(tmp)
- {
- if(tmp%10 == 1)
- ++count;
- tmp = tmp/10;
- }
- --num;
- }
- return count;
- }
- size_t q1::func1(size_t num)
- {
- size_t Ncount = 0;
- size_t Nlower = 0;
- size_t Ncurrent = 0;
- size_t Nhigher = 0;
- size_t circle = 1;
- while(num/circle != 0)
- {
- Nlower = num - (num/circle)*circle;
- Ncurrent = (num/circle)%10;
- Nhigher = num/(circle*10);
- switch(Ncurrent)
- {
- case 0:
- Ncount += Nhigher*circle;//当前位是0
- break;
- case 1:
- Ncount += Nhigher*circle + Nlower;//当前位是1
- break;
- default:
- Ncount += (Nhigher+1)*circle;//当前位置不是0或1
- break;
- }
- circle *= 10;
- }
- return Ncount;
- }
- int main()
- {
- q1 an;
- size_t num;
- while(1)
- {
- cout<<"please input positive integer: ";
- cin>>num;
- cout<<num<<" to 0 include "<<an.func1(num)<<" number 1 ."<<endl;
- }
- }
运行一下,发现即使数字很大相当快,编程之美作者牛逼
第二问,作者的答案是
然而,将n = 1 111 111 110输入
虽然很接近,但是最大N确实不在此点,而且经过手动校验,也不在这附近。
使用图像法,只要找出y = func1(N)和y = x两个函数交点即可。 由实践可知交点不止一个,并且有交点非整数。
进行遍历对比,效率很低,发现了存在这么多 N = func(N)
程序跑到这里,已经被操作系统强行终止了,但是我们知道在1~2^32 - 1 这个区间范围内应该还有更大的数字满足N = func1(N),现在遍历已经行不通了,所以建议使用MATLAB将 y=x 和 y = func1(x)这两个曲线绘出来,然后在估算交点区间,在小区间内进行更高效的遍历,这样可以快速找出答案。
编程之美Q1的更多相关文章
- 编程之美2014挑战赛 复赛 Codehunt平台试题答案
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- LeetCode:Climbing Stairs(编程之美2.9-斐波那契数列)
题目链接 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either c ...
- 编程之美2.5:寻找最大的K个数
编程之美2.5:寻找最大的K个数 引申:寻找第k大的数: 方法一: // 选择第k大的数(通过改进快速排序来实现) public static void SelectShort(int[] array ...
- 24点C++程序实现 编程之美1.16
解法1,对于任意输入的四个数字,给出一个24点的解法,若无解,则没有输出. 原理参照下图(编程之美原书) 代码如下,仅供参考 // 1.16.cpp : Defines the entry point ...
- 2017“编程之美”终章:AI之战勇者为王
编者按:8月15日,第六届微软“编程之美”挑战赛在选手的火热比拼中圆满落下帷幕.“编程之美”挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起,微软每年都在革新比赛命题.紧跟时代潮流, ...
- Python编程之美:最佳实践指南PDF高清完整版免费下载|百度云盘|Python新手到进阶
百度云盘:Python编程之美:最佳实践指南PDF高清完整版免费下载 提取码:1py6 内容简介 <Python编程之美:最佳实践指南>是Python用户的一本百科式学习指南,由Pytho ...
- 生成CPU使用率 sin 曲线 控制cpu使用率 编程之美
入职Oracle 以后想着把之前写过的<编程之美>中控制CPU使用率曲线的程序再写一边, 可是总是由于入职须要学习的东西太多, 没有时间. 程序早就写好了. 最终有机会贴出来了.o(∩∩) ...
- 编程之美:1.9高效率安排见面会 图的m着色问题 回溯法
原书问题,可以转换为图的m着色问题 ,下面该问题的代码 这里有参考ppt与code,免积分载 http://download.csdn.net/detail/u011467621/6341195 // ...
- 编程之美2015初赛第一场 hihoCoder #1156 : 彩色的树(染色问题)
#1156 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, , …, n.树中有n - 1条边,任意两个节点间恰好有一条 ...
随机推荐
- 印象最深的一个bug——排查修复问题事件BEX引发的谷歌浏览器闪退崩溃异常
前言 最近,我们部门负责项目运维的小王频频接到甲方的反馈,运行的项目使用谷歌浏览器登录后,每次点击处理2秒后,浏览器自动闪退崩溃.小王同学折腾了一个星期,还没找到问题的原因.甲方客户都把问题反馈给项目 ...
- httprunner3源码解读(3)client.py
源码目录结构 ApiResponse 这个类没啥好说的 class ApiResponse(Response): """ 继承了requests模块中的Response类 ...
- SpringCloud概念
SpringCloud概述 1.SpringCloud是什么? 官方解释: 官网: https://spring.io/projects/spring-cloud/ SpringCloud是一系列 ...
- redis学习笔记(详细)——高级篇
redis学习笔记(详细)--初级篇 redis学习笔记(详细)--高级篇 redis配置文件介绍 linux环境下配置大于编程 redis 的配置文件位于 Redis 安装目录下,文件名为 redi ...
- 2021 陇剑杯wp
前言 这比赛应该叫应急响应比赛,而且flag交三次就不能交了,就因为我交错一道题然后差一道进线下,气死了. Jwt 2.1 jwt 题目提示 2.2 搜索username得到 10087#admin ...
- IntelliJ IDEA竟然出了可以在云端编码的功能?
前言 自从我用了正版的IntelliJ IDEA后,基本上都是与时俱进,出一个新版本就立马更新,这也能能让我体验到最新最快的功能. 最近在闲逛Jetbrains的官网时,看到了最新的2021.3EAP ...
- python一对一教程:Computational Problems for Physics chapter 1-B Code Listings 1.7 - 1.12
作者自我介绍:大爽歌, b站小UP主 ,直播编程+红警三 ,python1对1辅导老师 . 本博客为一对一辅导学生python代码的教案, 获得学生允许公开. 具体辅导内容为<Computati ...
- 【Microsoft Azure 的1024种玩法】六、使用Azure Cloud Shell对Linux VirtualMachines 进行生命周期管理
[文章简介] Azure Cloud Shell 是一个用于管理 Azure 资源的.可通过浏览器访问的交互式经验证 shell. 它使用户能够灵活选择最适合自己工作方式的 shell 体验,本篇文章 ...
- 2、使用HashOperations操作redis(Hash哈希表)
文章来源:https://www.cnblogs.com/shiguotao-com/p/10560458.html 方法 c参数 s说明 Long delete(H key, Object... h ...
- maven私服-仓库图