老师,可以提问pta甲级的题目?

来源:3-5 三路快排partition思路的应用 Sort Color

weixin_慕仰6475988

2020-03-03

这是pta甲级的1001题, 我想问下这里(i+1)%3==len%3是什么意思?和这个题目的关系,麻烦老师了

#include

using namespace std;

int main() {
int a, b;
cin >> a >> b;
string s = to_string(a + b);
int len = s.length();
printf("%d\n", len);
for (int i = 0; i < len; i++) {
cout << s[i];
if (s[i] == ‘-’) continue;
if ((i + 1) % 3 == len % 3 && i != len - 1) cout << “,”;
}
return 0;
}

写回答

1回答

liuyubobobo

2020-03-04

请给我题目链接,谢谢。


==========


先不考虑索引是从 0 开始,假设索引是从 1 开始:


举稍微大一点的例子:

123,456,789

12,345,678

1,234,567


可以看到,逗号的位置,和字符串长度相关。

长度为 9,逗号在 3 6 之后,即长度可被 3 整除,逗号在可被 3 整除的那个索引(从 1 开始数)后面;

长度为 8,逗号在 2 5 之后,即长度被 3 整除模 2,逗号在被 3 整除模 2 的那个索引(从 1 开始数)后面;

长度为 7,逗号在 1 4 之后,即长度被 3 整除模 1,逗号在被 3 整除模 1 的那个索引(从 1 开始数)后面;


因为索引是从 0 开始计算的,所以是 i + 1


这个做法蛮 tricky。比较朴实的笨做法,是倒序处理一遍字符串,逢 3 个字符加一个逗号,最后再讲倒序处理的字符串翻转。


加油!:)

0
2
liuyubobobo
回复
weixin_慕仰6475988
我更新到原回答上了,加油!:)
2020-03-04
共2条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程