(OJ87)弟弟的作业
问题描述
你的弟弟刚做完了"100以内数的加减法"这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。
输入说明
输入文件包含不超过100行,以文件结束符结尾。每行包含一道题目,格式保证符合上述规定,且不包含任何空白字符。输入的所有整数均不含前导0。
输出说明
输出仅一行,包含一个非负整数,即弟弟答对的题目数量。
输入范例
55+12=67
15-8=7
100-35=?
83-50=33
4-3=6
81+5=21
输出范例
3
个人总结
主要是如何从字符串形式的表达式中提取加数与被加数/减数与被减数;注意char -> int的方法;在处理flag的时候要注意遇到+也要讨论,否则会漏一次i++。
代码
cpp
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
int count = 0;
while(cin >> s){
for(int i = 0; i < s.size();){
int num1 = 0;
int num2 = 0;
int num3 = 0;
int flag = 1;
while(s[i] <= '9' && s[i] >= '0'){
num1 = num1 * 10 + (s[i] - '0');
i++;
}
if(s[i] == '-'){
flag = -1;
i++;
}else{
flag = 1;
i++;
}
while(s[i] <= '9' && s[i] >= '0'){
num2 = num2 * 10 + (s[i] - '0');
i++;
}
i++;
if(s[i] == '?'){
break;
}
while(s[i] <= '9' && s[i] >= '0'){
num3 = num3 * 10 + (s[i] - '0');
i++;
}
if(num3 == num1 + (flag * num2)){
count++;
}
}
}
cout << count;
return 0;
}
(OJ88)字符串排序
问题描述
明明刚刚开始学英文,对于26个英文字母的顺序总是记不住,每次默写英文字母的时候,顺序总是前后颠倒。明明的爸爸对此相当着急,想有没有很好的办法来帮助明明记住字母的顺序。一天,明明的爸爸突然想到了一个游戏,能够帮助明明记住英文字母。这个游戏如下,给明明一个任意长度的英文字串,其中只包含小写字母,然后让明明对字符串中的字母排序,然后再把排完序的字符串写出来,如果连续写对10次的话,明明的爸爸就会奖励他,带他出去吃KFC。 例如:有一个字符串为asdf,经过排序后的字符串就是adfs。 明明显然对这个游戏非常感兴趣(其实明明更感兴趣的是那顿KFC),接受了他爸爸的提议,玩起了这个游戏。但是明明的爸爸在出题目考明明的时候,自己却犯了难,用英文随便写出一个无序的英文字符串是很简单的,但是排序的话却要费一些功夫,而且还不能出错,否则就无法知道明明做的对不对了。于是明明的爸爸请你帮忙,帮他写一个排序程序,来输出排序后的字符串。
明明爸爸的问题可以归结为:输入一行字符串,全部由小写字母构成,对字符串按26个英文字母的先后顺序进行排序,然后输出。
输入说明
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行由一个字符串组成,字符串中只包含小写字母,字符串的长度不超过100个字符。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个排序后的字符串。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。
输入范例
asdf
shflsahfslfdjsldfsjd
输出范例
adfs
adddffffhhjjlllsssss
个人总结
a~z的ASCII码值是递增的,因此给字符串排序可以当作经典的排序问题,这里使用快排对其进行排序。
代码
cpp
#include <bits/stdc++.h>
using namespace std;
void quicksort(string &s, int left, int right){
if(left >= right){
return;
}
char pivot = s[left];
int i = left;
int j = right;
while(i < j){
while(i < j && s[j] >= pivot){
j--;
}
while(i < j && s[i] <= pivot){
i++;
}
if(i < j){
char tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
s[left] = s[i];
s[i] = pivot;
quicksort(s, left, i - 1);
quicksort(s, j + 1, right);
}
int main(){
string s;
while(cin >> s){
quicksort(s, 0, s.size() - 1);
cout << s << endl;
}
return 0;
}
(OJ89)回文问题
问题描述
输入一串字符,其长度小于200,判断该串字符是否构成回文。 所谓回文是指从左到右和从右到左读一串字符的值是一样的,如:ABCBA。
输入说明
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由一行字符组成,它们之间没有空格,在行首和行尾没有多余的空格。
输出说明
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的终端)依次输出一组对应的答案:构成回文的输出Yes ,反之输出 No。所有数据前后没有多余的空格,两组数据之间也没有多余的空行。
输入范例
abcba
abcbb
输出范例
Yes
No
个人总结
回文的充要条件是与自身的逆序相等,因此写一个求字符串逆序的函数,用它来判定回文。
代码
cpp
#include <bits/stdc++.h>
using namespace std;
string solution(string s){
string reversed;
int j = 0;
for(int i = s.size() - 1; i >= 0; i--){
reversed.push_back(s[i]);
j++;
}
return reversed;
}
int main(){
string s;
while(cin >> s){
// cout << solution(s) << endl;
if(s == solution(s)){
cout << "Yes";
}else{
cout << "No";
}
cout << endl;
}
return 0;
}
英语翻译
信号处理云构建在移动网络、互联网骨干网以及各种信息网络之上,位于体系结构的中间层。在物联网中,一个感知事件的意义并不遵循确定性的或纯语法式的模型,事实上,这里可以采用面向服务架构(SOA)模型。大量传感器和过滤器被用于收集原始数据,而各种计算与存储云平台以及网格系统则用于处理这些数据,并将其转化为信息和知识形式。所感知到的信息被用来构建用于智能应用的决策系统,例如语义网或网格系统。中间层也可被视为一个服务层,其中某些参与者(如服务、组件或虚拟代理)具有自引用的特性。
表 12C-2 总结了物联网在三大民用应用领域中的应用情况。显然,物联网还具有大量军事应用,但这超出了本节讨论的范围。总体而言,物联网的应用旨在促进工业生产力提升并推动经济增长。物联网在环境保护方面发挥着重要作用,包括污染控制、天气预报以及灾害预防与恢复。在社会影响方面,物联网能够使我们的生活更加便利和舒适,政府服务、执法以及家庭和医疗健康改善都是主要受益领域。在本节剩余部分,我们将简要讨论其中的一些应用领域。
RFID应用的兴起在很大程度上取决于零售商、物流机构以及包裹配送公司的采纳情况。尤其是零售商,可能会为单个商品加贴标签,以同时解决多个问题,例如实现精确的库存管理、减少损耗,以及支持无人值守的步入式销售终端(这种方式有望在加快结账速度的同时减少盗窃和人工成本)。冷链审计与保障可能需要使用对温度敏感的材料和/或电子设备对食品和药品进行标记;为确保或监测易腐物品是否保持完好或是否需要处理,可能还需要实现物品、制冷系统、自动数据记录系统以及人工技术人员之间的通信与协作。
英语单词
