早上敲了两道枚举的题,我更习惯用c++,相比于c更简洁方便,题目和我写的代码如下
(191特别数的和)
#include <iostream>
using namespace std;
int check(int n)
{
while(n)
{
int s=n%10;
n=n/10;
if(s%10==2||s%10==0||s%10==1||s%10==9)return 1;
}
return 0;
}
int main()
{
int n;cin>>n;
int sum=0;
for(int i=1;i<=n;i++)
{
if(check(i))sum+=i;
}
cout<<sum;
return 0;
}
第一道根据题意敲出来就是
(504单词分析)
#include<bits/stdc++.h>
using namespace std;
int main()
{
string line;
getline(cin,line);
stringstream ss(line);
char n;
vector<char>vec;
while(ss>>n)
{
vec.push_back(n);
}
map<char,int>mp{
{'a',0},
{'b',0},
{'c',0},
{'d',0},
{'e',0},
{'f',0},
{'g',0},
{'h',0},
{'i',0},
{'j',0},
{'k',0},
{'l',0},
{'m',0},
{'n',0},
{'o',0},
{'p',0},
{'q',0},
{'r',0},
{'s',0},
{'t',0},
{'u',0},
{'v',0},
{'w',0},
{'x',0},
{'y',0},
{'z',0}
};
for(auto &i:vec)
{
mp[i]++;
}
int maxFreq = 0;
char maxChar = '\0';
for (auto &j : mp) {
if (j.second > maxFreq) {
maxFreq = j.second;
maxChar = j.first;
}
}
cout << maxChar <<'\n'<< maxFreq; // 输出出现频率最高的字母和它的频率
return 0;
}
思路:因为是输入不确定的一串英文,我就直接用vector动态数组,传入字符串,但是当我敲的时候,遇到了更麻烦的一点,后面中的map是字符型的,我要是改成string的话后面都要修改,于是依旧是用getline传入字符串(可以读取空格,虽然这道题也没有空格,但是可以逼自己养成一个良好习惯),然后用stringstream函数将字符串转换为其他数据类型,这里转换成了char类型,方便后续传入数组,紧急着是26个字母用map和出现的次数关联起来,最后再遍历数组,统计出现的次数,最后再比较就🆗了
我本来是想着把map中的数据再传到一个新数组中,再用sort函数排序,直接输出排序好的最大的,但是我发现这样敲出来代码会更长更冗余,会给人一种多此一举的感觉,于是就干脆在map中直接比较。
通过这两道题,学习一些知识点
1.使用sort函数对数组进行排序
sort(begin,end,less<data-type>()); //升序排序
sort(begin,end,greater<data.type>()); //降序排序
举例:int a[4]={1,2,3,4};
sort(a,a+4,less<int>());
2.vector动态数组传入字符串(以字符的形式)
string line;
getline(cin,line);
stringstream ss(line);
char n;
vector<char>vec;
while(ss>>n)
{
vec.push_back(n);
}
再对stringstream写一下最基础的用法(将字符串类型转换成int类型)
string str="1234";
stringstream ss(str);
int num;
ss>>num;
cout<<num<<endl;
3.vector动态数组传入int类型数值
vector<int>vec;
int n;
while(cin>>n)
{
vec.push_back(n);
if(cin.get()=='\n')
break;
}
4.使用auto遍历vector动态数组
vector<int>vec;
for(auto &i:vec)
{
cout<<i;
}
下午学了1.线性表的定义和基本操作
2.顺序表的定义(顺序表就是用顺序存储的方式实现线性表),还有静态动态两种实现顺序表的方法
具体代码(静态分配)
#dfine MaxSize=10;
typedef struct{
int data[MaxSize];
int length;
}SqList;
//基本操作 初始化一个顺序表
void InitList(Sqlist &L){
for(int i=0;i<MaxSize;i++)
L.data[i]=0;
L.length=0;
}
int main()
{
SqList L; //声明一个顺序表
InitList(L); //初始化顺序表
//后续操作
return 0;
}
动态分配(具体代码)
#define InitSize 10;
typedef struct{
int *data;
int length;
int MaxSize;
}SeqList;
void InitList(SeqList &L){
L.data=(int *)malloc(InitList*sizeof(int));
L.length=0;
L.MaxSize=InitList;
}
//增加动态数组长度
void IncreaseSize(SeqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++)
L.data[i]=p[i]; //将数据复制到新区域
L.MaxSize=L.MaxSize+len; //顺序表最大长度增加len
free(p); //释放原来的内存空间
}
int main()
{
SeqList L;
InitList(L);
//...往顺序表中随便插入几个元素...;
IncreaseSize(L,5);
return 0;
}