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

这段代码实现了一个基于广度优先搜索(BFS)的算法,用于解决模运算下的数列寻找问题。程序读取输入的整数n、c和m,以及一系列的运算数,通过BFS找到从0出发,经过若干次模运算后能回到0的路径,并检查路径长度不超过500。若存在这样的路径,输出其表示的数字;否则输出"SoSorry."。
摘要由CSDN通过智能技术生成

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值