编程竞赛高频考点

前言:考点技巧讲解 + 竞赛题实战


1.取位数

例如:123456

需求:取前三位和后三位

解:123456 / 1000 = 123

123456 % 1000 = 456

工具一:取余 (% 10) ------ "取尾"

规则: 一个数 % 10 的结果,永远是这个数的个位数(最右边的一位)。

  • 479 % 10 结果是 9

  • 47 % 10 结果是 7

  • 4 % 10 结果是 4

  • 12345 % 10 结果是 5

以此类推,想取后两位用%100,取后三位用%1000......

工具二:整除 (/ 10) ------ "去尾"

规则: 一个整数 / 10 的结果,永远是这个数去掉个位数后剩下的部分。

  • 479 / 10 结果是 47 (小数点后的部分被丢弃了)

  • 47 / 10 结果是 4

  • 4 / 10 结果是 0

  • 12345 / 10 结果是 1234

以此类推,想取前几位,就可以用/10、/100......的方法将后几位剔除掉

思考:取位数的方法有很多,为什么要用数学方法来取?

  1. 极致的性能(速度飞快)

% 和 / 是 CPU 的原生指令,是计算机硬件层面直接支持的运算。执行这些操作几乎不花费任何时间。

2. 极低的内存消耗

数学方法只使用了几个 int 变量,这些变量存储在一种叫做"栈"的高速内存区域中。而字符串方法创建了对象,这些对象存储在"堆"内存中,需要更复杂的内存管理(包括后续的垃圾回收)。简单说,数学方法几乎不占用额外内存

  1. 通用性

无论你用 Java, C++, Python, JavaScript 还是任何主流编程语言,整数的取余和整除运算逻辑都是完全一样的。这是一个放之四海而皆准的计算机科学基础知识。学会了它,你就在所有语言中都掌握了处理数字位数的最佳方法。

考点竞赛题

问题描述

借书高峰期,人来人往,图书馆内的自动借书机前排起了长队。小蓝正在排队时突然被告知,需要快速确认自己借书卡编号是否有效。

自动借书机规定,每张借书卡编号都必须是 66 位数,为了简化检查,工作人员采用了这样的规则:借书卡编号的前三位数字之和必须等于后三位数字之和。若不满 66 位,自动在前面补零。

例如编号 45123,补零后为 045123

前三位数字为 045,和为 0+4+5=90+4+5=9;

后三位数字为 123,和为 1+2+3=61+2+3=6;

两边和不相等,编号无效。

现在,给出小蓝的借书卡编号 NN,请你帮忙判断这个编号是否有效。

输入格式

输入一行,包含一个整数 NN,满足 0≤N<1060≤N<106。

输出格式

输出一行,如果编号有效,打印 YES;否则打印 NO

样例输入

复制代码
123321

样例输出

复制代码
YES

样例输入 2

复制代码
23456

样例输出 2

复制代码
NO
java 复制代码
import java.util.Scanner;

public class Main3 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        scan.close();

        // 1. 将N地分为两部分
        int firstPart = N / 1000; // 对于45123,这里得到45
        int lastPart = N % 1000;  // 对于45123,这里得到123

        // 2. 分别计算各位之和,整数除法会自动处理"补零"
        int sumFirst = (firstPart / 100) + ((firstPart / 10) % 10) + (firstPart % 10);
        int sumLast = (lastPart / 100) + ((lastPart / 10) % 10) + (lastPart % 10);

        if (sumFirst == sumLast) {
            System.out.print("YES");
        } else {
            System.out.print("NO");
        }
    }
}

未完待续......(OS:每日一更)

相关推荐
三块可乐两块冰3 分钟前
【机器学习笔记三十二】机器学习三十二
python
coding者在努力9 分钟前
算法竞赛中根据数据规模猜测算法
c++·算法·stl·时间复杂度
jing-ya11 分钟前
day 59 图论part10
java·开发语言·数据结构·算法·图论
love530love12 分钟前
ComfyUI-3D-Pack:Windows 下手动编译 mesh_inpaint_processor C++ 加速模块
c++·人工智能·windows·python·3d·hunyuan3d·comfyui-3d-pack
楼田莉子19 分钟前
C++高并发内存池:内存池调优与测试
c++·后端·哈希算法·visual studio
C羊驼19 分钟前
C语言学习笔记(十一):数据在内存中的存储
c语言·经验分享·笔记·学习
vx_biyesheji000123 分钟前
计算机毕业设计:Python多源新闻数据智能舆情挖掘平台 Flask框架 爬虫 SnowNLP ARIMA 可视化 数据分析 大数据(建议收藏)✅
爬虫·python·机器学习·数据分析·django·flask·课程设计
短剑重铸之日23 分钟前
《ShardingSphere解读》16 改写引擎:如何理解装饰器模式下的 SQL 改写实现机制?
java·数据库·后端·sql·shardingsphere·分库分表·装饰器模式
m0_5879589524 分钟前
机器学习与人工智能
jvm·数据库·python
2501_9083298527 分钟前
Python入门:从零到一的第一个程序
jvm·数据库·python