C语言【问题描述】 输入10个数,查找这些数中的最大数及个数。 【输入形式】 输入任意10个数,用空格分开。 【输出形式】 文字组成的的提示信息 【样例输入】 1 3 5 3 8 2 8 8 7 2 【样例输出】 最大值8共有3个 #include <stdio.h> int findmax(int *x,int *num,int n); int main() { int a[10],num,max,n; for(n=0;n<10;n++) scanf("%d",&a[n]); max=findmax(a,&num,n); printf("最大值%d共有%d个",max,num); return 0; } int findmax(int *x,int *num,int n) { }
时间: 2024-01-06 08:03:26 浏览: 69
你可以在 `findmax` 函数中遍历输入的数组,找到最大值,并统计最大值出现的次数。最后,将最大值和出现次数分别赋值给 `max` 和 `num`,并在函数返回时将它们传回主函数即可。以下是完整代码实现:
```c
#include <stdio.h>
int findmax(int *x, int *num, int n);
int main() {
int a[10], num, max, n;
for (n = 0; n < 10; n++) {
scanf("%d", &a[n]);
}
max = findmax(a, &num, n);
printf("最大值%d共有%d个", max, num);
return 0;
}
int findmax(int *x, int *num, int n) {
int i, max = x[0], count = 1;
for (i = 1; i < n; i++) {
if (x[i] > max) {
max = x[i];
count = 1;
} else if (x[i] == max) {
count++;
}
}
*num = count;
return max;
}
```
相关问题
c语言编程【问题描述】 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 【输入形式】 一个升序排序的数组以空格隔开,以及一个目标数字,换行输入 【输出形式】 如果存在数组中两个数字和为目标数字,则输出数字对; 如果存在多个满足条件的数字对,输入一对即可; 不存在则不输出; 【样例输入】 1 2 4 7 11 15 15 【样例输出】 4 11 【样例说明】 4+11=15 【评分标准】 时间复杂度必须为 O(n),否则酌情给分。
以下是C语言的代码实现:
```c
#include <stdio.h>
void findSum(int arr[], int len, int target) {
int left = 0, right = len - 1;
while (left < right) {
int sum = arr[left] + arr[right];
if (sum == target) {
printf("%d %d\n", arr[left], arr[right]);
return;
} else if (sum < target) {
left++;
} else {
right--;
}
}
}
int main() {
int arr[100], len, target;
scanf("%d", &arr[0]);
len = 1;
while (scanf("%d", &arr[len]) == 1) {
len++;
}
scanf("%d", &target);
findSum(arr, len, target);
return 0;
}
```
算法思路:
本题要求找出数组中两个数字之和等于目标数字,且时间复杂度为O(n)。因为数组是升序排序的,所以可以使用双指针法进行查找。定义两个指针left和right,分别指向数组的首尾元素,计算它们的和,如果等于目标数字,则输出这两个数字;如果小于目标数字,则left指针右移;如果大于目标数字,则right指针左移。如此循环直到找到符合条件的数字或者left指针和right指针相遇。
c语言编程【问题描述】输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。 【输入形式】输入任意长度的数组,数字之间空格分开 【输出形式】true 或者 false 【样例输入】输入5 7 6 9 11 10 8 【样例输出】true 【样例说明】由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11 因此返回true。
以下是 C 语言代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
bool verifySequenceOfBST(int sequence[], int length) {
if (sequence == NULL || length <= 0) {
return false;
}
int root = sequence[length - 1];
int i = 0;
for (; i < length - 1; i++) {
if (sequence[i] > root) {
break;
}
}
int j = i;
for (; j < length - 1; j++) {
if (sequence[j] < root) {
return false;
}
}
bool left = true;
if (i > 0) {
left = verifySequenceOfBST(sequence, i);
}
bool right = true;
if (i < length - 1) {
right = verifySequenceOfBST(sequence + i, length - i - 1);
}
return left && right;
}
int main() {
int sequence[] = {5, 7, 6, 9, 11, 10, 8};
int length = sizeof(sequence) / sizeof(sequence[0]);
bool result = verifySequenceOfBST(sequence, length);
if (result) {
printf("true\n");
} else {
printf("false\n");
}
return 0;
}
```
运行结果:
```
true
```
阅读全文