把一位数、两位数、三位数……这些所在的范围分开判断

可得1~9这些数范围在[1,9]内

10~99内共有90个数,每个数占两位,所以共有180位在,范围在[10,189]内

同理,100~999内共有900个数,每个数占三位,所以共有2700位在,范围在[190,2889]内

……

最后对于范围,可以得出一个规律

9 189 2889 38889 488889 ......

知道了范围,就可以求指定的答案了

比如输入一个数n范围在[190,2889]内

就能知道这是个三位数

n-190后,0/1/2对应数字100的三位,3/4/5对应数字101的三位,以此类推

所以(n-190)/3+100可以找出对应的数字

而(n-190)%3可以找出是对应的数字的第几位

(代码中写成(n-189+2)/3+99,意思相同,2代表位数减1)

因此对于Ⅰ题,可以直接暴力敲代码

#include<bits/stdc++.h>
using namespace std;
int main(){
int q,n,d,dd;
cin>>q;
while(q--){
cin>>n;
if(n<=)
cout<<n<<endl;
else if(n>&&n<=){
d=(n-+)/+;
if(n&)
cout<<d%<<endl;
else
cout<<d/<<endl;
}
else if(n>&&n<=){
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else
cout<<d/%<<endl;
}
else{
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else if(dd==)
cout<<d/%<<endl;
else
cout<<d/%<<endl;
}
} return ;
}

对于Ⅱ,这种方法显然也可行

#include<bits/stdc++.h>
using namespace std;
int main(){
int q,n,d,dd;
cin>>q;
while(q--){
cin>>n;
if(n<=)
cout<<n<<endl;
else if(n>&&n<=){
d=(n-+)/+;
if(n&)
cout<<d%<<endl;
else
cout<<d/<<endl;
}
else if(n>&&n<=){
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else
cout<<d/%<<endl;
}
else if(n>&&n<=){
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else if(dd==)
cout<<d/%<<endl;
else
cout<<d/%<<endl;
}
else{
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else if(dd==)
cout<<d/%<<endl;
else if(dd==)
cout<<d/%<<endl;
else
cout<<d/%<<endl;
}
} return ;
}

但是对于Ⅲ,1e18的范围就只能循环找规律了

数据打个表用循环做!

以下代码三道题目均能使用

#include<stdio.h>
int main(){
long long q,n,d,dd,i,j,qq[]={9LL,189LL,2889LL,38889LL,488889LL,5888889LL,68888889LL,788888889LL,8888888889LL,98888888889LL,1088888888889LL,11888888888889LL,128888888888889LL,1388888888888889LL,14888888888888889LL,158888888888888889LL},qd[]={9LL,99LL,999LL,9999LL,99999LL,999999LL,9999999LL,99999999LL,999999999LL,9999999999LL,99999999999LL,999999999999LL,9999999999999LL,99999999999999LL,999999999999999LL,9999999999999999LL},ed[]={1LL,10LL,100LL,1000LL,10000LL,100000LL,1000000LL,10000000LL,100000000LL,1000000000LL,10000000000LL,100000000000LL,1000000000000LL,10000000000000LL,100000000000000LL,1000000000000000LL,10000000000000000LL,100000000000000000LL};
scanf("%lld",&q);
while(q--){
scanf("%lld",&n);
if(n<=)
printf("%lld\n",n);
else{
for(i=;i<=;i++){
if(i<&&n>qq[i]&&n<=qq[i+]||i==&&n>qq[]){
d=(n-qq[i]+i+)/(i+)+qd[i];
dd=(n-qq[i])%(i+);
if(dd==)
printf("%lld\n",d%);
for(j=;j<i+;j++){
if(dd==j){
printf("%lld\n",d/ed[i+-j]%);
break;
}
}
break;
}
}
}
} return ;
}

完美!(

ZJNU 2340/2341/2343 - 罗小黑的“礼物”Ⅰ/Ⅱ/Ⅲ的更多相关文章

  1. Bzoj索引

    1001 : http://ideone.com/4omPYJ1002 : http://ideone.com/BZr9KF1003 : http://ideone.com/48NJNh1004 : ...

  2. UVa 1640 (计数) The Counting Problem

    题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...

  3. Hsql中In没有1000的限制

    SELECT * FROM user , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...

  4. jqu

    1 /*2 * 说明:3 * 本源代码的中文注释乃Auscarlin呕心沥血所作.旨在促进jQuery的传播以及向广大jQuery爱好者提供一个进阶4 *的途径,以让各位更加深入地了解jQuery,学 ...

  5. 【8.0.0_r4】AMS分析(十六)(ActivityManagerService.java上)

    代码位于frameworks/base/services/core/java/com/android/server/am/,一共有七十个文件. Java源码位于package com.android. ...

  6. No2_2.接口继承多态_Java学习笔记_继承

    ***类的继承***1.继承的实现extends2.[修饰符] class 子类名 extends 父类名{}3.修饰符一般为:public abstract final4.重写是指父子类之间的关系, ...

  7. 7.12归来赛_B

    Prime Judge 时间限制 1000 ms 内存限制 65536 KB 题目描写叙述 众所周知.假设一个正整数仅仅能被1和自身整除,那么该数被称为素数.题目的任务非常easy.就是判定一个数是否 ...

  8. 使用 Spring Boot 构建 RESTful API

    1. 使用 Idea 创建 Spring Initializer 项目 在创建项目的对话框中添加 Web 和 Lombok,或者建立项目后在 pom.xml 中添加依赖: <dependency ...

  9. Camtasia处理音频制作BGM

    我们在剪辑自己录制的视频时经常会需要同时对音频进行处理,camtasia是一个可以对视频的音频或者单独的音频文件进行处理的软件,那我们就来看看到底如何使用camtasia 2019(Win)来处理音频 ...

随机推荐

  1. 响应式布局之 px、em、 rem

    一.写在前面的话 作为一面前端开发者,对 px .em . rem 应该是再熟悉不过了,但大多数小伙伴应该都和我一样仅仅停留在了解的层面,并不是实质性的掌握它们.本文对三者进行了详细的总结和详细说明, ...

  2. 20200119日志 EPLAN高压房 VFD 单线图 心得

    提纲: EPLAN 画单线图的方法,可以先绘制原理图,然后在一个柜子里面的器件 用方框圈起来.方框名称一样.注意 一个工程里面的器件编号是唯一的. 断路器选型. PT 手车 接地刀作用     具体内 ...

  3. ping不通www.baidu.com,但可以访问www.baidu.com网页

    https://blog.csdn.net/stpeace/article/details/45116425 了解网络的人, 基本上都用过ping命令, 这个优秀的小工具通常能非常靠谱地检测网络的连通 ...

  4. Shell脚本之awk篇

    目录:一.概述二.awk基本语法格式三.awk基本操作四.awk条件及循环语句五.awk函数六.awk演示示例(源自于man手册) 一.概述 1. 产品概述: awk是一种编程语言,用于在linux/ ...

  5. POJ 3983:快算24

    快算24 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4791   Accepted: 2930 Description ...

  6. 批处理+7zip解压用纯数字加密的压缩包zip

    @echo off set path=c:\Program Files\7-Zip; for /L %%i in (0,1,100000) do ( call :myfunc %%i ) goto : ...

  7. node.js - 定义全局变量

    1,定义全局变量 app.set('name','八戒') 2,获取全局变量 app.get('name')

  8. Percona-Toolkit 之 pt-archiver 删除历史数据

    pt-archiver是Percona-Toolkit工具集中的一个组件,是一个主要用于对MySQL表数据进行归档和清除工具.它可以将数据归档到另一张表或者是一个文件中.pt-archiver在清除表 ...

  9. android 动画基础绘——帧动画(三)

    前言 这篇介绍帧动画. 什么是帧动画? 帧动画,非常好理解.就是轮播,比如我们看电视,其实就是一张一张播放过去的. 正文 <?xml version="1.0" encodi ...

  10. 基于云开发开发 Web 应用(三):云开发相关数据调用

    介绍 在完成了 UI 界面的实现后,接下来可以开始进行和云开发相关的数据对接.完成数据对接后,应用基础就打好了,接下来的就是发布上线以及一些小的 feature 的加入. 配置 在进行相关的配置调用的 ...