C++代码实现求助:查找学生提交材料的最早最少人数日期
解决思路与代码修改
要解决这个问题,核心是同时记录最小值的首次出现位置,因为日期是从1开始计数的,数组索引加1就是对应的日期编号。
修改后的代码如下:
#include <iostream> using namespace std; int main() { int arr[30], n, minVal, minIndex; // N最大为30,数组无需开1000长度 cin >> n; for (int i = 0; i < n; ++i) { cin >> arr[i]; } minVal = arr[0]; minIndex = 0; // 初始指向第1天(数组索引0对应日期1) for (int i = 0; i < n; ++i) { // 仅当当前元素更小的时候,才更新最小值和对应索引 if (arr[i] < minVal) { minVal = arr[i]; minIndex = i; } // 等于当前最小值时不更新,保留最早出现的位置 } // 日期是数组索引+1 cout << minIndex + 1 << " " << minVal << endl; return 0; }
关键修改点说明
- 新增
minIndex变量,初始化为0(对应第1天),专门跟踪最小值的首次出现位置 - 遍历数组时,只有当当前元素小于当前最小值时,才更新最小值和索引;若元素等于当前最小值,不做任何操作,以此保证保留最早出现的那个位置
- 输出时,将数组索引加1得到实际日期编号(数组从0开始计数,日期从1开始)
验证示例
- 输入
4 20 30 40 20:初始最小值为20,索引0;后续遇到第二个20时,因不小于当前最小值,minIndex保持0,最终输出1 20,符合要求 - 输入
3 30 20 40:遍历到索引1(对应第2天)时,20小于初始的30,更新minVal为20、minIndex为1,最终输出2 20,符合要求
内容的提问来源于stack exchange,提问作者Alrk
相关产品推荐
相关产品推荐

