解题思路

这是一道查找丢失数字并进行组合的问题,主要思路如下:

  1. 问题分析:

    • 原始数组包含1到10000的连续数字
    • 丢失了三个数字,其余数字被打乱
    • 需要找出丢失的数字并按从小到大拼接
    • 计算拼接后的数字除以7的余数
  2. 解决方案:

    • 使用标记数组记录出现的数字
    • 遍历1到10000找出未出现的三个数字
    • 将三个数字按顺序拼接成字符串
    • 计算最终结果对7的余数
  3. 关键点:

    • 使用内存数组标记已出现的数字
    • 注意数字拼接后可能很大,需要考虑大数处理

代码

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int findMissingNumbers() {
    // 标记数组,记录出现的数字
    vector<bool> seen(10001, false);
    
    // 读入9997个数字
    for (int i = 0; i < 9997; i++) {
        int num;
        cin >> num;
        seen[num] = true;
    }
    
    // 找出未出现的三个数字
    string result;
    int count = 0;
    for (int i = 1; i <= 10000 && count < 3; i++) {
        if (!seen[i]) {
            result += to_string(i);
            count++;
        }
    }
    
    // 计算对7的余数
    return stol(result) % 7;
}

int main() {
    cout << findMissingNumbers() << endl;
    return 0;
}
import java.util.*;

public class Main {
    public static int findMissingNumbers() {
        // 标记数组,记录出现的数字
        boolean[] seen = new boolean[10001];
        Scanner sc = new Scanner(System.in);
        
        // 读入9997个数字
        for (int i = 0; i < 9997; i++) {
            int num = sc.nextInt();
            seen[num] = true;
        }
        
        // 找出未出现的三个数字
        StringBuilder result = new StringBuilder();
        int count = 0;
        for (int i = 1; i <= 10000 && count < 3; i++) {
            if (!seen[i]) {
                result.append(i);
                count++;
            }
        }
        
        // 计算对7的余数,使用 Long 类型
        return (int)(Long.parseLong(result.toString()) % 7);
    }
    
    public static void main(String[] args) {
        System.out.println(findMissingNumbers());
    }
}
def find_missing_numbers():
    # 标记数组,记录出现的数字
    seen = [False] * 10001
    
    # 读入9997个数字
    numbers = map(int, input().split())
    for num in numbers:
        seen[num] = True
    
    # 找出未出现的三个数字
    result = ''
    count = 0
    for i in range(1, 10001):
        if not seen[i]:
            result += str(i)
            count += 1
            if count == 3:
                break
    
    # 计算对7的余数
    return int(result) % 7

# 主程序
print(find_missing_numbers())

算法及复杂度

  • 算法:标记数组
  • 时间复杂度: - 为数字范围
  • 空间复杂度: - 需要标记数组存储出现的数字