当前位置: 首页 > article >正文

牛客 ZT13 小红的数字删除

牛客 ZT13 小红的数字删除

在这里插入图片描述

  1. 3的倍数的特征是:一个数的各个数位上的数相加的和如果是3的倍数,则这个数也一定是3的倍数
  2. 用map存储每个数位对3求余的余数
    • 对3求余等于0,说明都是三的倍数,min(m[0], n - 1),要保证每次删除后,该整数都是3的倍数且大于0
    • 对3求余等于1:
      • 第一个数位必须删除
        • 如果第一位删除后,前置0也需要跟着删除
        • 而且所有数位不能全部删除
      • 第一个数位非必要删除,min(m[0] + 1, n - 1)
      • 第一次操作不能进行输出0
    • 对3求余等于2:
      • 第一个数位必须删除
        • 如果第一位删除后,前置0也需要跟着删除
        • 而且所有数位不能全部删除
      • 第一个数位非必要删除,min(m[0] + 1, n - 1)
      • 第一次操作不能进行输出0

代码如下:

#include<bits/stdc++.h>
using namespace std;
//如果剩下来全是3的倍数
int main() {
	int t;
	cin >> t;
	while (t--) {
		string ch;
		cin >> ch;

		map<int, int>m;
		int sum = 0;
		for (int i = 0; i < ch.size(); i++) {
			m[(ch[i] - '0') % 3]++;
			sum += ( ch[i] - '0');
		}
		int n = ch.size();
		//都是3的倍数,不能全部删除
		if (sum % 3 == 0) {
			cout << min(m[0], n - 1) << endl;
		} else if (sum % 3 == 1) {
			if (m[1]) {
				//必须删第一个数字
				int si = 0;
				//si是第一个数位删除后,需要同时删除的前置0
				if (m[1] == 1 && ((ch[0] - '0') % 3 == 1)) {
					int f = 0;
					for (int i = 1; i < ch.size(); i++) {
						if (ch[i] == '0' ) {
							si++;

						} else break;
					}
					if (si == m[0] && si)
						cout << 0 << endl;
					else {
						if (m[0] + 1 == n) {//如果第一个数位删了,后面数位都是3的倍数,不能全部删除
							//1+m[0]-si-1
							cout << m[0] - si << endl;
							//TODO
						} else
							cout << 1 + m[0] - si << endl;
					}

				} else
					cout << min(m[0] + 1, n - 1) << endl;
			} else cout << 0 << endl;
		} else {
			if (m[2]) {
				//	cout<<"***"<<endl;
				int si = 0;
				if (m[2] == 1 && ((ch[0] - '0') % 3 == 2)) {
					for (int i = 1; i < ch.size(); i++) {
						if (ch[i] == '0' ) {
							si++;
						} else break;
					}
					//全删了
					if (si == m[0] && si)
						cout << 0 << endl;
					else {
						if (m[0] + 1 == n) {
							cout << m[0] - si << endl;
							//TODO
						} else
							cout << 1 + m[0] - si << endl;
					}
				} else
					cout << min(m[0] + 1, n - 1) << endl;
			} else cout << 0 << endl;
		}
	}
}

http://www.kler.cn/a/415812.html

相关文章:

  • 重塑视频新语言,让每一帧都焕发新生——Video-Retalking,开启数字人沉浸式交流新纪元!
  • 每日速记10道java面试题04
  • python代码示例(读取excel文件,自动播放音频)
  • ZooKeeper 基础知识总结
  • web安全之信息收集
  • 使用 Spring AI + Elasticsearch 让 RAG 变得简单
  • go每日一题:mock打桩、defer、recovery、panic的调用顺序
  • 【Linux】进程控制-----进程等待wait与waitpid
  • 用Go语言重写Linux系统命令 -- ping
  • Python读取摄像头视频并将其保存为MP4文件
  • 利用Java爬虫获得店铺详情:技术解析
  • KUKA机器人中断编程5—自动回原点功能的编程
  • 工程企业如何做好成本控制?该如何入手?
  • 和鲸科技创始人CEO范向伟出席首届工业智算产业发展研讨会,共话 AI 创新与产业化落地
  • 在windows系统中安装python并确认安装成功
  • 中信建投张青:以金融智慧点亮公益新篇章
  • Flink的双流join理解
  • 一次完整的CNAS软件测试实验室内部审核流程
  • Ubuntu-20.04安装 terminator
  • Spring Boot教程之十二: Spring – RestTemplate
  • [巅峰极客 2021]签到
  • 如何具体实现商品详情的提取?
  • 等保测评在云计算方面的应用讲解
  • 从覆盖到拼接:优化 onInput 事件的输入
  • uniapp开发微信小程序笔记8-uniapp使用vant框架
  • 3.26线性回归对率回归