编程之美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条边,任意两个节点间恰好有一条 ...
随机推荐
- python中的itertools模块简单使用
itertools 高效循环下创建循环器的标准库 Infinite itertools,无限迭代器 itertools.count(start=0, step=10) 默认返回一个从0开始,依次+10 ...
- Pod 健康检查和服务可用性检查
Kubernetes 对 Pod 的健康状态可以通过两类探针来检查:LivenessProbe 和 ReadinessProbe,kubelet 定期执行这两类探针来针对容器的健康状况. Livene ...
- Go语言核心36讲(Go语言实战与应用二)--学习笔记
24 | 测试的基本规则和流程(下) Go 语言是一门很重视程序测试的编程语言,所以在上一篇中,我与你再三强调了程序测试的重要性,同时,也介绍了关于go test命令的基本规则和主要流程的内容.今天我 ...
- SpringCloud升级之路2020.0.x版-34.验证重试配置正确性(2)
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续上一节针对我们的重试进行测试 验证针对限流器异常的重试正确 通过系列前面的源码分析 ...
- ES6—数值(Number,Math对象)(复习+学习)
ES6-数值(Number,Math对象)(复习+学习) 每天一学,今天要学习ES6的关于数的扩展以及复习,然后通过看书,查阅资料,以及webAPI来搞清楚遇到的,没见过的对象方法等等,下面为本次学习 ...
- Django 小实例S1 简易学生选课管理系统 8 CSS样式优化
Django 小实例S1 简易学生选课管理系统 第8节--CSS样式优化 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 前面的几节下来,用户模块基 ...
- 浅谈java中的四个核心概念--思途青岛
Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少. 现在介绍下java的四个核心概念: 1.Java虚拟机 Java虚拟机的主 ...
- c语言指针学习笔记
指针变量就是存放内存地址的变量.c语言中使用 int *pa; 的方式来定义指针. ` main() int a = 10, b=20, s, t, *pa, *pb,*pc,*pd; pa = &a ...
- stat命令的实现-mysate(必做)
学习使用stat(1),并用C语言实现 1. 提交学习stat(1)的截图 使用 man 1 stat 查看帮助手册 从图中可以看到stat的用法是display file or file syste ...
- 快读模板 + #define 压缩for
快读是一个很重要的模板 #define 压缩for是为了代码的简洁 这里贴一下模板 #define f(i , a , b) for(int i=(a) ; i <= (b) ; i++) us ...