# 算法实验作业记录(C++)

1. 藏书问题：

4
English
Math
Chinese
Chinese

3
Chinese 2
English 1
Math 1

``````//map集合
#include
#include
#include
using namespace std;

int main() {
int n;
string name;
/*char name[101];*/
map<string,int> books;
class="superseo">cin >> n;
for (int i = 0; i < n; i++) {
cin >> name;
books[name]++;
}
cout << books.size() << endl;
map<string, int>::iterator it;
for (it = books.begin(); it != books.end(); it++) {
cout << it->first << ":\t" << it->second << endl;
}
return 0;
}
``````

2. 破案问题:

3 2
166 50 30
178 60 23
132 40 15
167 50 30
178 60 23

no
yes

``````//set集合,遍历criminal,man.count()
#include
#include
#include

using namespace std;

int main() {
int m, n;
string people;
cin >> m >> n;
set<string> man, criminal;
getchar();//吸收缓冲区
for (int i = 0; i < m; i++) {
getline(cin, people);
man.insert(people);
}
for (int i = 0; i < n; i++) {
getline(cin, people);
criminal.insert(people);
}
for (auto it = criminal.begin(); it != criminal.end(); ++it) {
if (man.count(*it) == 1) {
cout << "yes" << endl;
}
else
{
cout << "no" << endl;
}
}
return 0;
}
``````

3. 重复最大值

5
1 1 2 3 4

1 2

``````//map集合自动排序,小->大,出现次数
#include
#include
using namespace std;
int main() {
int n;
map <int, int> num;//默认情况下map根据键的大小采用升序排序
cin >> n;
for (int i = 0,x; i < n; ++i) {
cin >> x;
num[x]++;
}
int max = 0, sum = -1;
for (map<int,int>::iterator it = num.begin();it != num.end();it++) {
if (it->second >=sum) {//因为map已经排好序,所以只需要注意数出现的次数
sum = it->second;
max = it->first;
}
}
cout << max << "\t" << sum << endl;
return 0;
}
``````

4. 水果明细表

5
apple shandong 3
pineapple guangdong 1
sugarcane guangdong 1
pineapple guangdong 3
pineapple guangdong 1

guangdong
|----pineapple(5)
|----sugarcane(1)
shandong
|----apple(3)

``````//map<产地,map<水果,数量>>
#include
#include
#include
#include

using namespace std;
int main() {
int n;
set<string> poo;//place of origin
set<string> fruit;
map<string,map<string, int>> table;
cin >> n;
getchar();
for (int i = 0, m; i < n; i++) {
string p, f;
cin >> f >> p >> m;
poo.insert(p);
fruit.insert(f);
if (!table.count(p)) table[p][f] = 0;	//产地不存在,初始化
else if (!table[p].count(f)) table[p][f] = 0;//产地的水果不存在,初始化
table[p][f] += m;//累加
}
for (set<string>::iterator it1 = poo.begin(); it1 != poo.end(); ++it1) {
cout << *it1 << endl;
for (set<string>::iterator it2 = fruit.begin(); it2 != fruit.end(); ++it2) {
if (table[*it1].count(*it2)) cout << "  |----" << *it2 << "\t(" << table[*it1][*it2] << ")" << endl;
}
}

return 0;
}
``````

``````#include
#include
using namespace std;

bool fun(map<int, int> sum, int n) {
for (map<int, int>::iterator it = sum.begin(); it != sum.end(); it++) {
if (it->second > n / 2) return true;
}
return false;
}

int main() {
int n;
map<int, int> sum;
cin >> n;
for (int i = 0,m; i < n; i++) {
cin >> m;
sum[m]++;
}
if (fun(sum, n)) {
cout << "存在" << endl;
}
else {
cout << "不存在" << endl;
}
return 0;
}
``````

``````//双指针
#include
#include
using namespace std;

string fun(string s) {
int n = s.length();
const char* ch = s.c_str();
int i = 0;
while (i <= n / 2) {
if (ch[i] != ch[n - 1 - i]) {
return "false";
}
i++;
}
return "true";
}

int main() {
string a = "abcba", b = "abccba", c = "abcabc";
cout << "a:" << fun(a) << endl;
cout << "b:" << fun(b) << endl;
cout << "c:" << fun(c) << endl;
return 0;
}
``````

``````//双指针
#include
#include
#include
using namespace std;

string fun(vector<int> vec,int k) {
sort(vec.begin(), vec.end());
for (int i = 0, j = vec.size() - 1; i < j;) {
int sum = vec[i] + vec[j];
if (k == sum) {
cout << vec[i] << " " << vec[j] << endl;
return "true";
}
else if (sum > k) {
j--;
}
else {
i++;
}
}
return "false";
}

int main() {
int k = 9;
vector<int> a{ 6, 1, 4, 2 };
vector<int> b{ 1,8,3,4,5,10,9 };
cout <<"a:" << fun(a, k) << endl;
cout <<"b:" << fun(b, k) << endl;
return 0;
}
``````

``````//排序,比较,
#include
#include
using namespace std;

void fun(int *a,int *b,int m,int n) {
int i = 0, j = 0;
sort(a, a+m);//先排序
sort(b, b+n);
while (i < m && j < n) {
if (a[i] == b[j]) {
cout << a[i] << " ";
i++; j++;
}
else if (a[i] > b[j]) {
j++;
}
else {
i++;
}
}
cout << endl;
}

int main() {
int a[] {23,32,25,12,34,26,67,54,53,31};
int b[] {32,53,65,61,13,23,57,76,35,24};
int m = std::end(a) - std::begin(a);
int n = std::end(b) - std::begin(b);
fun(a, b, m, n);
return 0;
}
``````

``````#include
#include
using namespace std;
struct MyStruct
{
int p;	//质因数
int s;	//次数
};

vector<MyStruct> fun(int n) {
vector<MyStruct> vec;
int m = 0;
MyStruct e;
for (int i = 2; i <= n; i++) {
m = 0;
while(n % i == 0) {
m++;
n /= i;
}
if (m > 0) {
e.p = i;
e.s = m;
vec.push_back(e);
}
}
return vec;
}

int main() {
int n = 20;
vector<MyStruct> res;
res = fun(n);
cout << n << endl;
for (int i = 0; i < res.size(); i++) {
cout << res[i].p << ":" << res[i].s << endl;
}
return 0;
}
``````

20=225

``````//排序,直接遍历计算差值,map存储出现次数
#include
#include
#include
#include
using namespace std;

int main() {
vector<int> vec{ 9,1,5,6,2,3,8 };
map<int,int> res;
sort(vec.begin(),vec.end());
for (vector<int>::iterator it = vec.begin()+1; it != vec.end(); it++) {
int c = *it - *(it - 1);
res[c]++;
}
cout <<"最小差值:"<< res.begin()->first << " 元素对个数:" << res.begin()->second << endl;
return 0;
}
``````

``````#include
#include
#include
using namespace std;

void main(){
map<string, int> m1;
map<int, int> m2;
m1.insert(pair<string, int>("s1", 4));
m1.insert(pair<string, int>("s2", 3));
m1.insert(pair<string, int>("s3", 8));
m1.insert(pair<string, int>("s4", 4));
m1.insert(pair<string, int>("s5", 3));
for (map<string, int>::iterator it = m1.begin(); it != m1.end(); it++) {
m2[it->second]++;
}
for (map<int, int>::iterator it = m2.begin(); it != m2.end(); it++) {
if (it->second > 1) {
cout << it->first << ":" << it->second << endl;
}

}
}
``````

``````#include
#include
#include
using namespace std;

map<int, int> fun(int* a, int* b, int m, int n) {
int i = 0, j = 0;
map<int, int> m1;
while (i < m) {
m1[a[i]]++;
i++;
}
while (j < n) {
m1[b[j]]++;
j++;
}
return m1;
}

int main() {
int a[]{ 23,32,25,12,34,26,67,54,53,31 };
int b[]{ 32,53,65,61,13,23,57,76,35,24 };
int m = std::end(a) - std::begin(a);
int n = std::end(b) - std::begin(b);
map<int, int> res = fun(a, b, m, n);
for (map<int, int>::iterator it = res.begin(); it != res.end(); it++) {
if (it->second > 1) {
cout << it->first << " " << endl;
}
}
return 0;
}
``````

``````#include
#include
using namespace std;

int fun(stack<int> &st ,int k) {
stack<int> st1;
int a;
for (int i = 0; i < k; i++) {//出栈到st1
a = st.top();
st.pop();
st1.push(a);
}
a = st1.top();//获取第k个元素
st1.pop();
while (!st1.empty()) {
st.push(st1.top());
st1.pop();
}
return a;
}
//st出栈
void display(stack<int> st) {
while (!st.empty()) {
cout << st.top() << " ";
st.pop();
}
cout << endl;
}

int main() {
stack<int> st;
st.push(1);
st.push(2);
st.push(3);
st.push(4);
st.push(5);
st.push(6);
st.push(7);
int k = 3;
cout << "第" << k << "个元素:" << fun(st, k) << endl;
display(st);
return 0;
}
``````

(0)

• ## toy什么意思

toy作名词时意为玩具玩物玩意儿，作动词时意为玩弄调情随随便便地对待，作形容词时意为玩具的作玩具的个头很小的小体型品种的。 toy仅由三个字母组成，是一个很简单的单词，但是它的意思和用法都是非常多的，下面我们就来说说toy的具体意思和

2023-02-03
100
• ## 求穿越各种宅动漫，各种泡妹子，各种后宫的完本小说！！！只要穿越动漫的，召唤，锐换也行！

有幻想鹡鸰，鹦鹉之皆人，鹦鹉女神之无敌，守护鹦鹉娘山108星少女，重生之风流柯南，无限虚无死神，综漫之无尽乱入，魔法先生之暗羽后宫海贼王，穿越到某电磁炮 ，穿越之海贼王夺艳记，火影之奈良鹿丸，《死神之裁决》《我的无限后宫神之系统末世行（学院

2023-02-03
100
• ## 骨干是什么意思?

骨干指某事物的主要部分、主要支柱或最实质性的成分或部分。比喻在总体中起主要作用的人或事物。如骨干分子、骨干企业，又如“她是班里的文艺骨干”。骨总笔画：9笔。1.丨（竖）、2.ㄱ（横折）、3.ㄱ（横折）、4.丶（点）、5.乛（横撇／横钩）、

• ## 矿石有哪些种类

石头的种类：1、氟石又称软水紫晶、软水绿晶、萤石。石色为黄、绿、蓝、紫等。具有玻璃光泽，加热时有萤光吊现，破碎后的石渣可作为过滤器中的滤材。在工业生产中常用作冶炼金属辅料和制造氟化物，也可以加工成低档玉石。产地为浙江金华、江西德安、河北

• ## 梵净山在哪里？

梵净山自然保护区位于贵州省铜仁市江口、印江、松桃3县交界处，总面积为41900公顷，其中核心 区25800 公顷，缓冲区2800公顷，试验区13300公顷(其中旅游小区1200公顷)。主要保护对象是以黔金丝猴(Rhinopithecusr

2023-02-03
100
• ## 四个火字念什么？

yì。燚，读音为yì，中国汉字，由四个火字组成，部首为火，燚有两个意思，一是火貌（新华字典解释：形容火剧烈燃烧的样子），二是在人名里有平安的意思。简介“炏”读作“kǎi”，是火烧得特别旺的意思，引申为兴盛、威势显赫，如果你记不住这个读音

2023-02-03
100
• ## 什么叫原单，和正品有什么区别？

原单也叫余单、尾单，是由国外大品牌提供面料、版型，到国内寻找厂家生产。厂家生产出的质量合格的，就是专卖店里的“正品”。正品一般指的是专柜、专卖店等官方渠道购买的服饰产品。iknow-pic.cdn.bcebos.comcf1b9d16f

2023-02-03
100
• ## 折木奉太郎是哪个动漫的？

冰_“折木奉太郎是动漫《冰_》的男主角。折木奉太郎，拥有优秀的洞察力、推理能力，以“不做也行的事情就不做，非做不可的事情一切从简”为人生信条。他社团活动原本没有什么兴趣，在姐姐的邀请下加入了古典文学社。遇到了面对对待任何事都充满好奇心的千反

2023-02-03
100
• ## bj是什么意思

bj是什么意思?它是什么的缩略语?下面是我给大家整理的bj是什么意思，供大家参阅! bj是什么意思 Bj abbr. Bothrops jararaca 巴西具窍蝮蛇Burj (Arabic=bluff, cliff, fort

2023-02-03
100