xipixili1979 2024-09-29 16:31 采纳率: 0%
浏览 1

助,2023年CSP-S密码锁,请看看哪里写错了,只得了80分


#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int as[10][10];
int main()
{
//    freopen(".in","r",stdin);
//    freopen(".out","w",stdout);
    int n,ans=0;
    cin>>n;
    if(n==1)
    {
        cout<<81;
        return 0;
    }
    for(int i=0;i<n;i++)
        for(int j=1;j<=5;j++)
            cin>>as[i][j];
    for(int a=0;a<=9;a++)
        for(int b=0;b<=9;b++)
            for(int c=0;c<=9;c++)
                for(int d=0;d<=9;d++)
                    for(int e=0;e<=9;e++)
                    {
                        int cnt=0;
                        for(int i=0;i<n;i++)
                        {
                            int k=0;
                            bool q=0,w=0,y=0,r=0,t=0;
                            if(a!=as[i][1])
                            {
                                q=1;
                                k++;
                            }
                            if(b!=as[i][2])
                            {
                                w=1;
                                k++;
                            }
                            if(c!=as[i][3])
                            {
                                y=1;
                                k++;
                            }
                            if(d!=as[i][4])
                            {
                                r=1;
                                k++;
                            }
                            if(e!=as[i][5])
                            {
                                t=1;
                                k++;
                            }
                            if(k>2)
                                continue;
                            if(k==1)
                                cnt++;
                            else if(k==2)
                            {
                                if(q==1 and w==1 and a-b==as[i][1]-as[i][2])
                                    cnt++;
                                else if(w==1 and y==1 and b-c==as[i][2]-as[i][3])
                                    cnt++;
                                else if(y==1 and r==1 and c-d==as[i][3]-as[i][4])
                                    cnt++;
                                else if(r==1 and t==1 and d-e==as[i][4]-as[i][5])
                                    cnt++;
                            }
                        }
                        if(cnt==n)
                            ans++;
                    }
    cout<<ans;
    return 0;
}

img

  • 写回答

2条回答 默认 最新

  • 一轮明月照丘壑 2024-09-29 16:32
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从您给出的代码和测试点信息来看,有几个可能的问题和需要注意的地方:

    1. 数组大小问题:您使用了二维数组 as[10][10] 来存储密码锁的每一行的前五个数字。然而,对于n=5的情况(也就是密码锁的每一行有五个数字),应该使用一个二维数组来存储密码锁的整体值而不是部分值。由于您是使用了类似遍历的形式对每个字符进行判断,这可能是个问题所在。可能的情况下应考虑每一行的整体长度并调整相应的逻辑。
    2. 计算错误问题:在计算满足条件的字符串数量时,可能由于某些细节计算不准确或逻辑处理不完整而导致出现问题。在检查时考虑字符位置的同时也需要确保该位置数字之间的关系是否满足题目的要求。另外,需要确认输入的数字范围是否正确。比如确保密码锁的数字不会超出范围等。
    3. 输入和输出问题:对于输入输出部分的处理也可能存在问题。在读取和输出数据时需要注意格式问题,特别是关于输入输出流的设置,例如 freopen 的使用可能会导致一些问题。如果不确定文件路径是否正确或者是否存在,可以先注释掉这部分代码,直接使用标准输入输出流进行测试。

    针对以上几点,您可以尝试以下修改和优化:

    • 确保数组大小与题目要求的输入一致,并根据输入数据进行适当的处理。例如根据实际的密码锁的长度来调整代码逻辑。
    • 重新检查并调整字符的判断逻辑和计数逻辑,确保计算准确且满足题目要求。
    • 检查输入输出部分的代码,确保输入输出格式正确无误。可以考虑去掉 freopen 的使用或确认文件路径正确存在后再使用。可以先简化这部分逻辑,直接用标准输入输出进行测试和调试。

    建议在实际编程时增加调试步骤,对每个可能的逻辑点进行测试,确认程序的实际行为是否符合预期结果。如果仍有困难,可以考虑结合具体的测试用例来分析和解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月29日

悬赏问题

  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?
  • ¥15 nasm x86 变量归零
  • ¥65 Tree 树形控件实现单选功能,可以使用element也可以手写一个,实现全选为全选状态
  • ¥60 寻抓云闪付tn组成网页付款链接
  • ¥16 寻字节跳动内部人员帮推简历
  • ¥20 如何通过sentry收集上传Android ndk的崩溃?