5 条题解

  • 0
    @ 2026-4-17 10:35:03
    #include <bits/stdc++.h>
    
    using namespace std;
    
    int su[200];
    int cnt = 0;
    void sushu() {
        for (int i=2; i<=1000; i++) {//列举2到1000之间的数;::
            int is = 1;
            for (int j=2; j<i; j++) {
                if (i%j==0) {
                    is = 0;
                    break;
                }
            }
            if (is==1) {
                su[cnt] = i;
                cnt++;
            }
    
        }
    }
    
    
    int findzuijisushu(int x) {
        int bestsushu = su[0];// 假设第一个是最近的素数::
        int bestdist = abs(su[0] - x);
            for (int i=1; i<cnt; i++) {
                int dist = abs(su[i]-x);
    
                if (dist < bestdist) {//距离更小,直接更新::
                    bestdist = dist;
                    bestsushu = su[i];
                } else if (dist == bestdist) {//相等情况:::
                        if (su[i]>bestsushu) {
                            bestsushu = su[i];
                  }
             }
            }
    
    
    return bestsushu;
    
    }
    
    int main () {
        sushu();
        int N; cin>>N;
        while(N--) {
            int x; cin>>x;
            int result = findzuijisushu(x);
            cout<<result<<endl;
        }
        return 0;
    }
    

    信息

    ID
    179
    时间
    3000ms
    内存
    128MiB
    难度
    6
    标签
    (无)
    递交数
    783
    已通过
    227
    上传者