用c++求向量中出现次数最多的数
时间: 2023-05-11 14:06:03 浏览: 48
可以使用哈希表来解决这个问题。具体的做法是遍历向量,将每个数作为键,出现次数作为值存入哈希表中。然后再遍历哈希表,找到出现次数最多的数即可。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 100000
int main() {
int n, i, x, max_cnt = 0, max_num = 0;
int cnt[MAX_N] = {0};
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &x);
cnt[x]++;
if (cnt[x] > max_cnt) {
max_cnt = cnt[x];
max_num = x;
}
}
printf("%d\n", max_num);
return 0;
}
```
这个程序可以读入一个整数 n,表示向量的长度,然后读入 n 个整数,表示向量中的元素。程序使用一个数组 cnt 来记录每个数出现的次数,然后遍历 cnt 数组,找到出现次数最多的数。
相关问题
c++ vetctor 统计每个值出现次数
C语言中,可以使用向量(vector)来统计每个值出现的次数。下面是一个简单实现的示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int value;
int count;
} ValueCount;
int main() {
int num;
printf("请输入要统计的数字个数:");
scanf("%d", &num);
int *numbers = (int*)malloc(num * sizeof(int));
for (int i = 0; i < num; i++) {
printf("请输入第%d个数字:", i + 1);
scanf("%d", &numbers[i]);
}
ValueCount *counts = (ValueCount*)malloc(num * sizeof(ValueCount));
int countSize = 0;
for (int i = 0; i < num; i++) {
int value = numbers[i];
int found = 0;
for (int j = 0; j < countSize; j++) {
if (counts[j].value == value) {
counts[j].count++;
found = 1;
break;
}
}
if (!found) {
counts[countSize].value = value;
counts[countSize].count = 1;
countSize++;
}
}
printf("每个值出现的次数如下:\n");
for (int i = 0; i < countSize; i++) {
printf("值:%d,出现次数:%d\n", counts[i].value, counts[i].count);
}
free(numbers);
free(counts);
return 0;
}
```
以上代码通过向量`ValueCount`的方式,统计用户输入的数字数组中,每个值出现的次数,并输出结果。程序首先要求用户输入要统计的数字个数,然后逐个输入这些数字,然后遍历数字数组,对每个值进行统计,通过向量`ValueCount`来记录每个值出现的次数。最后打印出每个值和对应的出现次数。
c++ 求m*n阶矩阵平均值、方差、协方差、特征向量、特征值
以下是 C++ 代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int m, n;
cout << "请输入矩阵的行数和列数(空格隔开):" << endl;
cin >> m >> n;
double **matrix = new double*[m];
for (int i=0; i<m; i++) {
matrix[i] = new double[n];
}
// 输入矩阵
cout << "请输入矩阵的元素(按行输入):" << endl;
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
cin >> matrix[i][j];
}
}
// 计算平均值
double average = 0.0;
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
average += matrix[i][j];
}
}
average /= m * n;
cout << "平均值为:" << average << endl;
// 计算方差
double variance = 0.0;
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
variance += pow(matrix[i][j] - average, 2);
}
}
variance /= m * n;
cout << "方差为:" << variance << endl;
// 计算协方差矩阵
double **covariance = new double*[n];
for (int i=0; i<n; i++) {
covariance[i] = new double[n];
}
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
covariance[i][j] = 0.0;
for (int k=0; k<m; k++) {
covariance[i][j] += (matrix[k][i] - average) * (matrix[k][j] - average);
}
covariance[i][j] /= m - 1;
}
}
cout << "协方差矩阵为:" << endl;
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
cout << covariance[i][j] << " ";
}
cout << endl;
}
// 计算特征值和特征向量
double *eigenvalues = new double[n];
double **eigenvectors = new double*[n];
for (int i=0; i<n; i++) {
eigenvectors[i] = new double[n];
}
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
eigenvectors[i][j] = 0.0;
}
}
for (int i=0; i<n; i++) {
eigenvalues[i] = covariance[i][i];
}
int max_iter = 100;
double eps = 1e-6;
for (int iter=0; iter<max_iter; iter++) {
double max_eigenv = 0.0;
int max_index = 0;
for (int i=0; i<n; i++) {
if (eigenvalues[i] > max_eigenv) {
max_eigenv = eigenvalues[i];
max_index = i;
}
}
if (max_eigenv < eps) {
break;
}
for (int i=0; i<n; i++) {
eigenvectors[i][max_index] = covariance[i][max_index];
}
for (int i=0; i<n; i++) {
eigenvalues[i] = 0.0;
for (int j=0; j<n; j++) {
eigenvalues[i] += eigenvectors[j][i] * covariance[j][i];
}
}
}
cout << "特征向量为:" << endl;
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
cout << eigenvectors[i][j] << " ";
}
cout << endl;
}
cout << "特征值为:" << endl;
for (int i=0; i<n; i++) {
cout << eigenvalues[i] << " ";
}
cout << endl;
// 释放内存
for (int i=0; i<m; i++) {
delete[] matrix[i];
}
delete[] matrix;
for (int i=0; i<n; i++) {
delete[] covariance[i];
}
delete[] covariance;
for (int i=0; i<n; i++) {
delete[] eigenvectors[i];
}
delete[] eigenvectors;
delete[] eigenvalues;
return 0;
}
```
需要注意的是,协方差矩阵的维度是 $n \times n$,而特征向量和特征值的计算需要使用 Jacobi 方法或其他迭代方法。上述代码使用的是简化版的 Jacobi 方法,只能处理对称矩阵,而且迭代次数和精度可能需要根据实际情况进行调整。