一、题目
二、解析
1.数字反转
思路:
利用字符数组录入整数,循环调换数组的数值,最后循环输出字符数组
代码如下(示例):
#include<iostream>
using namespace std;
//1
int main() {
char a[12];
int length = 0;
char remark; //临时保存
cin >> a;
if (a[0] == '0');
//输入为 -
else if (a[0] == '-')
{
//计算长度
for (int i = 12; i >= 1; i--) {
if (a[i] == '\0' && a[i - 1] != '0' || a[i] == '0' && a[i - 1] != '0')
{
length = i-1;
break;
}
}
for (int i = length / 2,j=1; i > 0; i--) {
remark = a[length];
a[length] = a[j];
a[j] = remark;
length--;
}
}
//去除 0
else if (a[0]!='-') {
for (int i = 12; i >= 1; i--) {
if (a[i] == '\0'&&a[i-1]!='0'||a[i]=='0'&&a[i-1]!='0')
{
length = i ;
break;
}
}
for (int i = length / 2, j = 0; i > 0; i--,j++) {
remark = a[length-1];
a[length-1] = a[j];
a[j] = remark;
length--;
}
}
int i = 0;
while (a[i] != '0'&&a[i]!='\0') {
cout << a[i];
i++;
}
}
时间复杂度:O(N)
空间复杂度:O(N)
输入输出样例:
2.统计单词数
思路:利用vector容器存储字符数组,便于文章的遍历。利用_stricmp()完成单词和文章的匹配输出。
代码如下(示例):
#include<iostream>
#include<vector>
using namespace std;
int main() {
char a[11];
char* it_2 = a;
int Flag = 0;//记录出现次数
int Adress = 0;//首次位置
cin >> a;
typedef struct Message {
char b[11];
}Message;
Message d;
vector<Message> c;
//初始化文章
cin >> d.b;
c.push_back(d);
while (getchar() != '\n')
{
cin >> d.b;
c.push_back(d);
}
int j = -1;
char* it_1;
for (auto it = c.begin(); it != c.end(); it++) {
j++;
it_1 = (*it).b;
if (_stricmp(it_1,it_2)==0) {//如何不区分大小写
if (Flag == 0) {
Adress = j;
}
Flag++;
}
}
if (Flag == 0) cout << -1;
else {
cout << Flag << " " << Adress;
}
}
输入输出样例:
总结
前两道题目考察的知识点都是字符的掌握程度,还有对于stl容器的使用,第一次使用acm的模式参加比赛,和只写核心算法的区别还是很大的,在完成构建和输出的过程中也有很多坑,个人需要加强对于容器的理解。