欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

杭电OJ 1111(C++)

程序员文章站 2022-07-13 17:37:48
...
#include <iostream>
using namespace std;

int xr, xi, br, bi, con;
int flag, t;
int a[105];

void dfs(int n)
{
	int x, y, i;
	if (n > 100) //剪枝
		return;
	if (xr == 0 && xi == 0) //剪枝
	{
		flag = 1;
		t = n;
		return;
	}
	for (i = 0; i * i < con; i++)
	{
		a[n] = i;
		x = (xr - i) * br + xi * bi;
		y = xi * br - (xr - i) * bi;
		if (x % con == 0 && y % con == 0) //保证整除
		{
			xr = x / con;
			xi = y / con;
			dfs(n + 1);
		}
		if (flag == 1)
			return;
	}
}

int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		cin >> xr >> xi >> br >> bi;
		con = br * br + bi * bi;
		flag = 0;
		dfs(0);
		if (!flag)
			cout << "The code cannot be decrypted." << endl;
		else
		{
			cout << a[t - 1];
			for (int i = t - 2; i >= 0; i--)
				cout << ',' << a[i];
			cout << endl;
		}
	}
	return 0;
}

 

相关标签: 杭电OJ 杭电OJ