密码宝盒c语言编程,密码宝盒问题,求解

#include

#include

#include

#include

#include

using namespace std;

const int N = 5005;

bool vis[N];

string ans;

int a[17],pre[N],ansAt[N],n,m,c;

int ctoi(char c)

{

return c >= '0' && c <= '9' ? c - '0' : c - 'A' + 10;

}

char itoc(int i)

{

return i <= 9 ? i + '0' : i + 'A' - 10;

}

bool bfs()

{

queue q;

q.push(0);

while(!q.empty())

{

int cur = q.front();q.pop();

for(int i=0;i

{

int nxt = (cur * c + a[i]) % n;

if(cur == 0 && a[i] == 0 || vis[nxt])

continue;

vis[nxt] = true;

ansAt[nxt] = a[i];

pre[nxt] = cur;

if(nxt == 0)

return true;

q.push(nxt);

}

}

return false;

}

bool check()

{

ans = "";

int p = 0;

do

{

ans += itoc(ansAt[p]);

p = pre[p];

}while(p);

return (int)ans.size() <= 500;

}

int main()

{

int T;

scanf("%d",&T);

while(T--)

{

memset(vis,false,sizeof(vis));

scanf("%d%d%d",&n,&c,&m);

for(int i=0;i

{

char num[3];

scanf("%s",num); //以免存入空格

a[i] = ctoi(num[0]);

}

sort(a,a+m);

if(n == 0)

{

puts(a[0] == 0 ? "0" : "So Sorry.");

continue;

}

if(bfs() && check())

{

for(int i=(int)ans.size()-1;i>=0;i--)

putchar(ans[i]);

puts("");

}

else

puts("So Sorry.");

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是密码宝盒问题算法的基本流程图: 1. 输入密码宝盒的尺寸和每个格子上的数字 2. 对每一行和每一列进行求和,得到行和列的和数组 3. 遍历所有的格子,每次将当前格子的数字减去行和列的和,再将结果加上所有行和列的和的差值 4. 如果所有格子的数字都变成了 0,那么密码宝盒就是完美的;否则,密码宝盒不完美,输出提示信息 下面是基本流程图: ``` 输入密码宝盒的尺寸和每个格子上的数字 ┌─────────────┐ │ │ │ 获取输入 │ │ │ └─────────────┘ │ ▼ 对每一行和每一列进行求和,得到行和列的和数组 ┌─────────────┐ │ │ │ 求和处理 │ │ │ └─────────────┘ │ ▼ 遍历所有的格子,每次将当前格子的数字减去行和列的和,再将结果加上所有行和列的和的差值 ┌─────────────────┐ │ │ │ 数字变换和计算 │ │ │ └─────────────────┘ │ ▼ 如果所有格子的数字都变成了 0,那么密码宝盒就是完美的;否则,密码宝盒不完美,输出提示信息 ┌─────────────────────┐ │ │ │ 判断是否为完美密码宝盒 │ │ │ └─────────────────────┘ │ ▼ 输出结果 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值