柿子饼同学 发表于 2022-3-4 22:47:36

苹果排序的问题

【问题描述】

陶陶家的院子里有许多苹果树,每到秋天树上就会结出许多苹果。苹果成熟的时候,陶陶就会跑去摘苹果。经过估算,每个苹果都有一个甜度,第i个苹果的甜度为di。

陶陶把苹果按甜度堆放,他想知道哪种甜度的苹果最多。

【输入格式】

输入共有两行。

第一行,包含一个整数n,表示有n个苹果。

第二行,包含n个用空格隔开的正整数分别表示n个苹果的甜度。

【输出格式】

输出共一行,包含两个用空格隔开的整数,分别表示最多的那种苹果的甜度及有几个这样的苹果。

【输入样例】

10

100 200 200 140 129 134 167 198 200 110

【输出样例】

200 3

【数据规模】

1 ≤ di ≤ 1000

1 ≤ n ≤ 100

我的代码它就给 33 分 , 不知为什么#include <bits/stdc++.h>
using namespace std;

int main(){
    int n, i, j, s=1;
    vector <int> app;
    scanf("%d", &n);
    for(i=0; i<n; i++){
            scanf("%d", &j);
            app.emplace_back(j);
        }
        for(i=0; i<n; i++){
                for(j=0; j<i; j++){
                        if(app > app){
                                swap(app, app);
                        }
                }
        }
        for(i=1; i<n; i++){
                if(app == app){
                        s++;
                }
        }
        printf("%d %d", app, s);
    return 0;
}

jackz007 发表于 2022-3-4 23:21:04

#include <bits/stdc++.h>
using namespace std;

int main(void)
{
      int i , k , n , s , app                                     ;
      scanf("%d", & n)                                                 ;
      for(i = 0 ; i < n ; i ++) scanf("%d" , & app)               ;
      for(k = app , i = 1 ; i < n ; i ++) if(app > k) k = app ; // 确定最高糖度值
      for(i = s = 0 ; i < n ; i ++) if(app == k) s ++               ; // 确定最高糖度苹果的个数
      printf("%d %d\n" , k , s)                                        ;
}
      编译、运行实况
D:\\C>g++ -o x x.c

D:\\C>x
10
100 200 200 140 129 134 167 198 200 110
200 3

D:\\C>

傻眼貓咪 发表于 2022-3-5 09:18:31

本帖最后由 傻眼貓咪 于 2022-3-5 09:22 编辑

本来想用博耶-摩尔多数投票算法(Boyer–Moore majority vote algorithm)

但题目好像没有说明最多会超于总数的一半{:10_269:}

傻眼貓咪 发表于 2022-3-5 09:40:50

#include <iostream>
#include <vector>
#include <utility>

int main(){
        std::vector<int> apple(1001, 0); // 用于记录苹果数量
        int i, n;
        std::pair<int, int> ans(-1, -1); // (数量, 甜度)
        std::cin >> n;
        while(n--){
                std::cin >> i;
                apple++;
                if(apple > ans.first){
                        ans.first = apple;
                        ans.second = i;
                }
        }
        std::cout
                << ans.second
                << " "
                << ans.first
                << std::endl;
        return 0;
}10
100 200 200 140 129 134 167 198 200 110200 3

jhq999 发表于 2022-3-5 12:45:59

本帖最后由 jhq999 于 2022-3-5 12:51 编辑

int max=0,maxsum=0,n=0,a=0;
scanf("%d",&n);
while(n--)
{
   scanf("%d",&a);
   if(a>max)max=a,maxsum=1;
   else if(a==max)maxsum++;
}

柿子饼同学 发表于 2022-3-6 22:00:22

jackz007 发表于 2022-3-4 23:21
编译、运行实况

啊啊啊也没满分{:10_266:}

柿子饼同学 发表于 2022-3-6 22:01:03

傻眼貓咪 发表于 2022-3-5 09:40


你的满了{:10_275:}

柿子饼同学 发表于 2022-3-6 22:01:34

jhq999 发表于 2022-3-5 12:45


谢谢

柿子饼同学 发表于 2022-3-6 22:02:24

傻眼貓咪 发表于 2022-3-5 09:40


这个 pair 是什么东西啊

傻眼貓咪 发表于 2022-3-7 07:14:12

柿子饼同学 发表于 2022-3-6 22:02
这个 pair 是什么东西啊

pair 是模板,类似于 vector,仅用于储存 2 个数据(可以不同类型),用 .first 和 .second 读取数据。
页: [1]
查看完整版本: 苹果排序的问题