寻找出现次数最多的数 c语言代码
时间: 2023-04-08 18:03:25 浏览: 123
以下是一个寻找出现次数最多的数的 C 语言代码:
```c
#include <stdio.h>
int main() {
int n, max_count = 0, max_num;
scanf("%d", &n);
int count[n], num[n];
for (int i = 0; i < n; i++) {
scanf("%d", &num[i]);
count[i] = 0;
for (int j = 0; j < i; j++) {
if (num[j] == num[i]) {
count[j]++;
if (count[j] > max_count) {
max_count = count[j];
max_num = num[j];
}
break;
}
}
}
printf("%d\n", max_num);
return 0;
}
```
请问还有什么问题吗?
相关问题
c语言递归寻找子串个数
要在C语言中使用递归来寻找子串的个数,你可以按照以下步骤进行操作:
1. 定义一个递归函数来计算子串的个数。函数的输入参数应包括目标字符串和要寻找的子串。函数返回子串在目标字符串中出现的次数。
2. 在递归函数中,首先检查目标字符串的长度是否小于子串的长度。如果是,则递归结束,返回0。
3. 如果目标字符串的长度大于等于子串的长度,则比较目标字符串的前几个字符与子串是否相等。如果相等,则递归调用该函数来计算剩余部分中子串出现的次数。
4. 递归调用时,传递目标字符串的下一个字符和子串作为参数。
5. 如果目标字符串的前几个字符与子串不相等,则递归调用该函数来计算剩余部分中子串出现的次数。
6. 在递归函数的结束处,返回子串在目标字符串中出现的总次数。
以下是一种实现方式的示例代码:
```c
#include <stdio.h>
#include <string.h>
int countSubstring(char *str, char *substr) {
int count = 0;
int len_str = strlen(str);
int len_substr = strlen(substr);
if (len_str < len_substr) {
return 0;
}
if (strncmp(str, substr, len_substr) == 0) {
count = 1;
}
count += countSubstring(str + 1, substr);
return count;
}
int main() {
char str[] = "abababa";
char substr[] = "aba";
int result = countSubstring(str, substr);
printf("子串出现的次数为: %d\n", result);
return 0;
}
```
在上述示例代码中,我们定义了`countSubstring`函数来计算子串出现的次数。在`main`函数中,我们传入了目标字符串`str`和子串`substr`,并打印出子串出现的次数。在这个例子中,子串"aba"在目标字符串"abababa"中出现了2次。
在一个数组中出现次数最多的数称为众数。用分治法设计求解众数问题的算法,并分析时间复杂度 写出C++伪代码
分治法解决众数问题的算法思路如下:
1. 将数组分成两部分,分别递归求解每一部分的众数;
2. 如果两部分的众数相同,则返回该众数;
3. 如果两部分的众数不同,则需要分别计算两部分众数出现的次数,返回出现次数较多的众数。
时间复杂度分析:
设递归深度为h,则每层的时间复杂度为O(n),因为需要遍历数组寻找众数。总的时间复杂度为O(nlogn)。
C语言实现:
```c
#include <stdio.h>
int majorityElement(int* nums, int numsSize) {
if (numsSize == 1) {
return nums[0];
}
int mid = numsSize / 2;
int left = majorityElement(nums, mid);
int right = majorityElement(nums+mid, numsSize-mid);
if (left == right) {
return left;
}
int left_count = 0, right_count = 0;
for (int i = 0; i < numsSize; i++) {
if (nums[i] == left) {
left_count++;
} else if (nums[i] == right) {
right_count++;
}
}
return (left_count > right_count) ? left : right;
}
int main() {
int nums[] = {1, 2, 2, 2, 3, 4, 2};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int result = majorityElement(nums, numsSize);
printf("The majority element is %d\n", result);
return 0;
}
```
伪代码实现:
```
function majorityElement(nums, l, r)
if l == r then
return nums[l]
end if
mid = (l+r) / 2
left = majorityElement(nums, l, mid)
right = majorityElement(nums, mid+1, r)
if left == right then
return left
end if
left_count = 0, right_count = 0
for i = l to r do
if nums[i] == left then
left_count = left_count + 1
else if nums[i] == right then
right_count = right_count + 1
end if
end for
if left_count > right_count then
return left
else
return right
end if
end function
nums = [1, 2, 2, 2, 3, 4, 2]
result = majorityElement(nums, 0, nums.length-1)
print("The majority element is " + result)
```