A
Description 牛牛得到了一个字符串(可能含有空格),他希望在这些字符串中提取出数字。
例如:a1b23c456d007890中可以提取出1, 23, 456, 7890共4个数字。
现在,他得到了一个长度高达1000的字符串,请你帮他提取出所有的数字。
Input 【简单算法题—牛客OJ|牛客练习赛67 A、B题解】本题有多组数据。
输入一个字符串S。
Output 输出提取出的所有数字,相邻两个数字用一个空格隔开。
不包含数字的时候输出空行
注意,你输出的数不能含有前导0。
Solution 利用一个栈来维护,遍历字符串,遇到一个数字,若栈空,将其入栈,否则判断一下,栈是否只有一个元素并且为字符’0’,是,将其出栈,然后将当前字符入栈。遇到非数字字符,判断栈是否为空,不为空,将栈内元素全部出栈,翻转一下,输出。
AC Code
#include
#include
#include
#include
using namespace std;
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
string s;
while (getline(cin, s)) {
int flag = 0;
int qian0 = 0;
stack t;
for (int i = 0;
i < s.length();
i++) {
if ('0' <= s[i] && s[i] <= '9') {
if ( t.size() == 1 && t.top() == '0') {
t.pop();
t.push(s[i]);
}
else t.push(s[i]);
}
else {
if (!t.empty()) {
string ans;
while (!t.empty()) {
ans += t.top();
t.pop();
}
for (int i = ans.length() - 1;
i >= 0;
i--) cout << ans[i];
cout << " ";
}
}
}
if (!t.empty()) {
string ans;
while (!t.empty()) {
ans += t.top();
t.pop();
}
for (int i = ans.length() - 1;
i >= 0;
i--) cout << ans[i];
cout << " ";
}
cout<
B Description 水题,白给!
Solution 一个数与另一个数进行&运算,不会变得比原来大,所以直接输出最大值!
AC Code
#include
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int m=0;
while(n--){
int x;
cin>>x;
if(x>m) m=x;
}
cout<
觉得有帮助的话,点个赞再走吧!
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题