暑假计算机学习第二天(7.15)

早上敲了两道枚举的题,我更习惯用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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝学会编程的代码小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值