1 条题解

  • 0
    @ 2025-5-22 20:17:50

    数据范围

    对于 100% 100\% 的数据有 2n100 2 \le n \le 100

    数组中的每个元素 arr[i]\text{arr[i]} 满足 1arr[i]10001 \le \text{arr[i]} \le 1000

    可以看出,数据在 int 范围内,并且数组只需要开 110 110 大小即可( nn 大于 100 100 即可,不要太大)。

    int arr[110];
    

    第一行输入一个整数 nn,表示数组的大小。

    第二行输入 nn 个整数,表示数组 arr\text{arr} 中的元素。

    第三行输入一个整数 kk

    注意 kk 是在输入完数组数据之后再输入进来

    int n, k;
    cin >> n;
    
    for (int i = 1; i <= n; i++) cin >> arr[i];
    cin >> k;
    

    请你找到数组中所有大于 kk 的数字中,下标最大的那个数。如果找到了,请输出这个数。

    因为是找大于 kk 下标最大的那个数字,所以其实倒序遍历一遍就可以,只要 arr[i]>k\text{arr[i]}>k,就输出 arr[i]\text{arr[i]},注意只需要输出最大的即可,所以输出完,return 0 停止整个程序,这是一个小技巧,应该掌握。

    for (int i = n; i >= 1; i--) {
    	if (arr[i] > k) {
    		cout << arr[i];
    		return 0;
    	}
    }
    

    小T想知道班里到底有多少人分数比他高以确定自己在班上的排名(如果分数相同,小T排第一)。

    可以看出只需要遍历一遍数组,统计分数比小T高的人数即可,统计人数记得初始化变量为 0 0

    int cnt = 0;
    for (int i = 1; i <= n; i++) {
    	if (arr[i] > arr[t]) {
    		cnt++;
    	}
    }
    

    如果没有找到,输出 1-1

    因为前面在遍历的过程中,如果找到了,就会 return 0 提前停止程序,如果没有停止也就意味着找不到满足要求的数字,直接输出 1-1 即可,

    cout << -1;
    

    信息

    ID
    1222
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    6
    已通过
    4
    上传者