一、矩阵对角线元素之和
问题描述
编写一个函数,该函数有三个参数,一个是二维数组,一个是二维数组的行数,最后一个是二维数组的列数。输出该二维数组两条对角线元素之和。
#include <iostream>
#include <vector>
using namespace std;
int func(vector<vector<int>> &nums)
{
int n = nums.size(), res = 0;
for (int i = 0; i < n; i ++)
res += nums[i][i] + nums[i][n - i - 1];
return res;
}
int main()
{
vector<vector<int>> nums{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
cout << func(nums) << endl;
return 0;
}
二、统计字符个数
问题描述
编写一个函数,输入一个字符串,分别统计该字符串中出现的数组字符个数,字母字符个数和其他类型字符个数。
#include <iostream>
using namespace std;
void func(string s)
{
int num = 0, letter = 0, other = 0;
for (char c : s)
{
if (c >= '0' && c <= '9') num ++;
else if ((c >= 'a' && c <= 'z') ||(c >= 'A' && c <= 'Z')) letter ++;
else other ++;
}
cout << "数字个数:" << num << endl;
cout << "字母个数:" << letter << endl;
cout << "其他类型字符个数:" << other << endl;
}
int main()
{
string s;
while (cin >> s)
func(s);
return 0;
}
三、选票系统
问题描述
候选人得票的统计程序,设有 m m m个选举人, n n n个候选人,输入一个得票的候选人的名字,要求输出每个候选人的得票结果。
#include <iostream>
#include <cstring>
using namespace std;
const int M = 3, N = 4;
struct Candidate
{
char name[20];
int s; // 票数
} can[N];
int main()
{
for (int i = 0; i < N; i ++)
{
cout << "请输入一个候选人的名字:";
cin >> can[i].name;
}
for (int i = 0; i < M; i ++)
{
cout << "请输入一个得票的候选人的名字:";
char str[20];
cin >> str;
for (Candidate &c : can)
if (!strcmp(c.name, str))
{
c.s ++;
puts("投票成功!");
break;
}
}
puts("投票结果如下:");
for (Candidate &c : can)
printf("候选人姓名:%s, 得票数:%d\n", c.name, c.s);
return 0;
}
四、统计节点
问题描述
已知有结构体定义如下:
struct Node
{
int data;
Node* next;
};
编写一个函数int caortx(Node* node, int x)
,函数功能为统计出单链表中的节点的值等于给定值
x
x
x的节点数。
#include <iostream>
using namespace std;
struct Node
{
int data;
Node* next;
Node(int _data) : data(_data), next(NULL) {} // 构造函数
};
int caortx(Node* node, int x)
{
int res = 0;
Node* p = node;
while (p)
{
if (p->data == x) res ++;
p = p->next;
}
return res;
}
int main()
{
Node *node = new Node(-1);
for (int i = 0; i < 5; i ++)
{
int x;
cin >> x;
// 头插法
Node* p = new Node(x);
p->next = node;
node = p;
}
cout << caortx(node, 3) << endl;
return 0;
}