#include<stdio.h>
int main(){
int N;
scanf("%d",&N);
int ab[N];
int t;
int max,min,max_cnt=0,min_cnt=0;
for(int i=0;i<N;i++){
scanf("%d ",&ab[i]);
}
for(int i=0;i<N;i++){
for(int j=i;j<N;j++){
if(ab[i]>ab[j]){
t=ab[i];
ab[i]=ab[j];
ab[j]=t;
}
}
}
max=ab[N-1];
min=ab[0];
for(int i=0;i<N;i++){
if(ab[i]==max){
max_cnt++;
}
if(ab[i]==min){
min_cnt++;
}
}
printf("%d %d\n%d %d",min,min_cnt,max,max_cnt);
}
我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!
供参考:
#include <stdio.h>
int arr[1000001] = {0};//能力值数组
int main()
{
int n = 0, num = 0, max = 0, min = 0;
scanf("%d", &n);
for(int i = 0;i < n; i++)
{
scanf("%d", &num);
arr[num]++;//记录个数
if(i == 0 || max < num)
max = num;
if(i == 0 || min > num)
min = num;
}
printf("%d %d\n", min, arr[min]);
printf("%d %d\n", max, arr[max]);
return 0;
}
【以下回答由 GPT 生成】
首先,你的代码在定义数组 ab
的时候使用了变量 N
,而C语言中不支持变长数组的定义方式。因此,你需要更改数组的定义。
另外,你使用了一个双重循环来对数组进行排序,这种方法的时间复杂度为O(N^2),效率较低。可以采用其他的排序算法,如快速排序或归并排序,来提高排序的效率。
此外,在统计最大值和最小值的个数时,你使用了两个循环来分别统计,可以优化为一次循环即可。
下面是对你的代码进行优化和改进的版本:
#include <stdio.h>
// 快速排序函数
void quickSort(int arr[], int low, int high) {
if (low < high) {
int i = low, j = high, pivot = arr[low];
while (i < j) {
while (i < j && arr[j] >= pivot)
j--;
if (i < j)
arr[i++] = arr[j];
while (i < j && arr[i] <= pivot)
i++;
if (i < j)
arr[j--] = arr[i];
}
arr[i] = pivot;
quickSort(arr, low, i - 1);
quickSort(arr, i + 1, high);
}
}
int main() {
int N;
scanf("%d", &N);
int ab[N];
int t;
int max, min, max_cnt = 0, min_cnt = 0;
for (int i = 0; i < N; i++) {
scanf("%d", &ab[i]);
}
quickSort(ab, 0, N - 1);
max = ab[N - 1];
min = ab[0];
for (int i = 0; i < N; i++) {
if (ab[i] == max) {
max_cnt++;
}
if (ab[i] == min) {
min_cnt++;
}
}
printf("%d %d\n%d %d", min, min_cnt, max, max_cnt);
return 0;
}
这个版本的代码使用了快速排序算法来对数组进行排序,时间复杂度降低到了O(NlogN)。并且使用了一次循环来统计最大值和最小值的个数。
希望对你有帮助!
【相关推荐】