我改了之后又出现了新问题

P3955 [NOIP2017 普及组] 图书管理员

difficultlong @ 2024-09-28 21:06:55

代码:

#include<bits/stdc++.h>
using namespace std;
int n,q;
int tb[1001],fh[1001][9],xbc[1001],xb[1001];
int main(){
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++){
        scanf("%d",&tb[i]);
    }
    for(int i=1;i<=q;i++){
        scanf("%d%d",&xbc[i],&xb[i]);

    }
    sort(tb+1,tb+n+1);
    for(int i=1;i<=n;i++){
        int a=tb[i];
        int j=1;
        while(a){
            fh[i][j]=a%10;
            a/=10;
            j++;
        }
    }
    bool flag;
    for(int i=1;i<=q;i++){
        int a=xb[i],m[9];
        int j=1;
        while(j<=xbc[i]){
            m[j]=a%10;
            a/=10;
            j++;
        }
        for(int k=1;k<=n;k++){
            int l=1;
            flag=true;
            while(l<=xbc[i]){
                if(m[l]!=fh[k][l]){
                    flag=false;
                    break;
                }
                l++;
            }
            if(flag){
                printf("%d\n",tb[i]);
                break;
            }
        }
        if(!flag){
            printf("-1\n");
        }
    }
    return 0;
}

按照样例复制粘贴后:

输出结果

5 5
2123
1123
23
24
24
2 23
3 123
3 124
2 12
2 12
———
23
24
-1
-1
-1

(上面是我的输入和输出,输出和样例对不上)

by zfs732 @ 2024-09-30 23:29:56

  1. 输出变量错误
    • 原代码在找到匹配的图书时,错误地输出了 tb[i],这里的 i 是查询的索引,而不是图书的索引。正确的应该是输出 tb[k],其中 k 是图书的索引。

以下是仅修改必要部分后的修正代码:

#include<bits/stdc++.h>
using namespace std;
int n,q;
int tb[1001],fh[1001][9],xbc[1001],xb[1001];
int main(){
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++){
        scanf("%d",&tb[i]);
    }
    for(int i=1;i<=q;i++){
        scanf("%d%d",&xbc[i],&xb[i]);

    }
    sort(tb+1,tb+n+1);
    for(int i=1;i<=n;i++){
        int a=tb[i];
        int j=1;
        while(a){
            fh[i][j]=a%10;
            a/=10;
            j++;
        }
    }
    bool flag;
    for(int i=1;i<=q;i++){
        int a=xb[i],m[9];
        int j=1;
        while(j<=xbc[i]){
            m[j]=a%10;
            a/=10;
            j++;
        }
        for(int k=1;k<=n;k++){
            int l=1;
            flag=true;
            while(l<=xbc[i]){
                if(m[l]!=fh[k][l]){
                    flag=false;
                    break;
                }
                l++;
            }
            if(flag){
                printf("%d\n", tb[k]); // 修改:从 tb[i] 改为 tb[k]
                break;
            }
        }
        if(!flag){
            printf("-1\n");
        }
    }
    return 0;
}

修改说明

  1. 输出变量的修正
    • 原代码
      printf("%d\n", tb[i]);
    • 修正后
      printf("%d\n", tb[k]);

by difficultlong @ 2024-10-02 08:21:06

@zfs732 感谢大佬,已关注(不胜感激啊!!!)


|