唐龙守则
题目描述
运行代码
#include<iostream> using namespace std; int main(){ int n; cin>>n; cout<<n/3; return 0; }
代码思路
直接输出题意,每三个就要撤回一条
最大公约
题目描述
运行代码
#include<iostream> #include<map> #include<bits/stdc++.h> #include<algorithm> using namespace std; map<int ,int >mp; int main() {int n; int a=1; cin>>n; for(int i=0;i<n;i++) { int t; cin>>t; mp[t]++; if(mp[t]>a) a=mp[t]; } cout<<a; return 0; }
代码思路
- 引入头文件:
#include<iostream>
用于标准输入输出操作,如cin
和cout
。#include<map>
引入了STL中的map容器,用于存储键值对,这里用于记录每个整数及其出现的次数。 - 变量定义:
int n;
用于存储输入的整数序列的长度。int a=1;
初始化最大计数值为1,用于记录出现次数最多的整数的频次。 - 主函数
main()
:
- 读取整数序列的长度
n
。 - 使用一个
for
循环遍历输入的整数序列。在循环内部,读取每个整数t
。更新map
容器mp
,将t
作为键,其出现次数作为值。mp[t]++
表示如果t
已经在mp
中,则其计数加1;如果不在,则自动插入并初始化为1。使用条件语句if(mp[t]>a)
检查当前整数t
的出现次数是否大于已知的最大计数a
,如果是,则更新a
为当前的计数。 - 循环结束后,输出变量
a
,即出现次数最多的整数的出现次数。
总结:这个程序实现了一个简单的统计问题,即找出一组整数中出现次数最多的数的出现次数。它使用了STL中的map容器来进行高效地计数,并通过一次遍历确定了最大计数值。
连锁进位
题目描述
运行代码
#include <bits/stdc++.h> #include<iostream> #include<algorithm> using namespace std; void solve(){ string s; cin >> s; reverse(s.begin(),s.end()); int k=0; for(k;k<s.size()-1;k++) { if(s[k]!='0') break; } if(k==s.size()-1) { cout << 0 << endl; return ; } int ans=10-(s[k]-'0'); k++; for(k;k<s.size()-1;k++) { ans+=9-(s[k]-'0'); } cout << ans << endl;; } int main(){ ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); int T; T=1; cin >> T; while(T--) solve(); return 0; }
代码思路
- 输入与预处理:读取一个整数
T
,表示有T组测试数据,定义一个函数solve()
来处理每组测试数据。在solve()
中,读取一个字符串s
,这个字符串代表了要进行变换的非负整数。 - 反转字符串:因为我们要从低位到高位考虑更改数字,所以先将字符串
s
反转,这样就可以从字符串的开头开始处理,实际上是在处理原数的低位。 - 寻找第一个非零位:通过一个循环,从字符串的开始处寻找第一个不为'0'的字符。这是因为在处理过程中,我们关心的是如何让数变大,如果全是0,说明已经是最大的数了(对于有前导零的情况),直接输出0。如果找到了非零位,进入下一步处理;如果没有找到,说明原数全为0,直接输出0。
- 计算最少更改次数:从第一个非零位开始,计算每个位置上需要更改的最小次数,使其成为比当前数字大1的数字。例如,如果字符是'1',则需要更改1次变成'2';如果是'9',则需要更改1次变成'0'(因为是循环的,9后是0)。对于第一个非零位之后的其它所有位(直到倒数第二位,因为最后一位的处理方式不同),直接计算需要更改为9的次数,即9减去当前数字。
计算完成后,累加这些更改次数得到最终答案,并输出。 - 主循环:在
main()
函数中,读取测试用例的数量T
,然后循环调用solve()
函数处理每组数据。
注意:ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
,优化IO速度的代码行,关闭C++标准库与C标准库之间的同步,以及解除cin和cout的绑定,从而加速IO操作。