7-1 顺序表的建立及遍历
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);
for(int i = 0; i < n; i ++)
cin >> a[i];
for(int i = 0; i < n; i ++)
{
cout << a[i];
if(i != n - 1) cout << " ";
}
}
7-2 递增有序顺序表的插入
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m;
cin >> n;
vector<int> a(n + 1);
for(int i = 0; i < n; i ++)
cin >> a[i];
cin >> a[n];
sort(a.begin(), a.end());
for(int i = 0; i <= n; i ++)
cout << a[i] << ",";
}
7-3 顺序表(删除)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);
for(int i = 0; i < n; i ++) cin >> a[i];
int x, y;
int k = 0;
cin >> x >> y;
vector<int> b(n);
for(int i = 0; i < n; i ++)
if(a[i] < x || a[i] > y) b[k ++] = a[i];
for(int i = 0; i < k; i ++)
{
cout << b[i];
if(i != k - 1) cout << " ";
}
}
7-4 数组元素循环右移n位
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
vector<int> a(n);
for(int i = 0; i < n; i ++)
cin >> a[i];
int k = m % n;
vector<int> b(n);
for(int i = 0; i < n; i ++)
{
int x = (i + k) % n;
b[x] = a[i];
}
for(int i = 0; i < n; i ++)
cout << b[i] << " ";
}
7-5 最大子列和问题
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);
for(int i = 0; i < n; i ++)
{
cin >> a[i];
}
int x = 0, y = 0;
for(int i = 0; i < a.size(); i ++)
{
y += a[i];
if(y > x) x = y;
else if(y < 0) y = 0;
}
cout << x << endl;
}
7-6 一元多项式的乘法与加法运算
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int t1[N], t2[N], cj[N], he[N];
void show(int q[],int ran)
{
int tag = 0;
for(int i = ran; i >= 0; i --)
if(q[i] != 0)
{
if(tag) cout << " ";
tag = 1;
cout << q[i] << " " << i;
}
if(!tag) cout << "0 0";
}
int main()
{
int n1, n2, a, b;
memset(t1, 0, sizeof(t1));
memset(t2, 0, sizeof(t2));
memset(cj, 0, sizeof(cj));
memset(he, 0, sizeof(he));
cin >> n1;
for(int i = 0; i < n1; i ++)
{
cin >> a >> b;
t1[b] = a;
}
cin >> n2;
for(int i = 0; i < n2; i ++)
{
cin >> a >> b;
t2[b] = a;
}
for(int i = 0; i <= 1000; i ++)
for(int j = 0; j <= 1000; j ++)
cj[i + j] += t1[i] * t2[j];
for(int o = 0;o <= 1000; o ++)
he[o] += t1[o] + t2[o];
show(cj, 2000);
cout << endl;
show(he, 1000);
cout << endl;
}
7-7 一元多项式的加法
#include <bits/stdc++.h>
using namespace std;
struct Term {
int coefficient;
int exponent;
};
vector<Term> polynomialAddition(vector<Term>& poly1, vector<Term>& poly2) {
vector<Term> result;
int i = 0, j = 0;
while (i < poly1.size() && j < poly2.size())
{
if (poly1[i].exponent > poly2[j].exponent)
{
result.push_back(poly1[i]);
i ++;
}
else if (poly1[i].exponent < poly2[j].exponent)
{
result.push_back(poly2[j]);
j ++;
}
else
{
int sum = poly1[i].coefficient + poly2[j].coefficient;
if (sum != 0)
{
Term term;
term.coefficient = sum;
term.exponent = poly1[i].exponent;
result.push_back(term);
}
i ++;
j ++;
}
}
while (i < poly1.size()) {
result.push_back(poly1[i]);
i ++;
}
while (j < poly2.size()) {
result.push_back(poly2[j]);
j ++;
}
return result;
}
int main()
{
int size1, size2;
cin >> size1;
vector<Term> poly1(size1);
for (int i = 0; i < size1; i++)
cin >> poly1[i].coefficient >> poly1[i].exponent;
cin >> size2;
vector<Term> poly2(size2);
for (int i = 0; i < size2; i++)
cin >> poly2[i].coefficient >> poly2[i].exponent;
vector<Term> result = polynomialAddition(poly1, poly2);
if (result.empty())
cout << "0 0" << endl;
else
{
for (int i = 0; i < result.size(); i++)
{
cout << result[i].coefficient << " " << result[i].exponent;
if (i != result.size() - 1) cout << " ";
}
cout << endl;
}
}
7-8 单词逆置
#include<bits/stdc++.h>
using namespace std;
string f(string& res)
{
string a = res;
int l = 0, r = res.size() - 1;
while(l < r)
{
swap(a[l], a[r]);
l ++;
r --;
}
return a;
}
int main()
{
int n;
cin >> n;
cin.ignore();
while(n --)
{
string s;
getline(cin, s);
vector<string> ans;
string res = "";
for(char c : s)
{
if(c == ' ')
{
ans.push_back(f(res));
res = "";
}
else res += c;
}
ans.push_back(f(res));
for(int i = 0; i < ans.size(); i ++)
{
cout << ans[i];
if(i != ans.size() - 1) cout << ' ';
}
cout << endl;
}
}
7-9 合并有序数组
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);
for(int i = 0; i < n; i ++)
cin >> a[i];
int m;
cin >> m;
vector<int> b(m);
for(int i = 0; i < m; i ++)
cin >> b[i];
vector<int> ans(n + m);
int i = 0, j = 0, k = 0;
while(i < n && j < m)
{
if(a[i] < b[j]) ans[k ++] = a[i ++];
else ans[k ++] = b[j ++];
}
while(i < n) ans[k ++] = a[i ++];
while(j < m) ans[k ++] = b[j ++];
for(int i = 0; i < n + m; i ++)
cout << ans[i] << " ";
}