HDOJ 6937

Yiding Number

Problem Description
A positive integer is called a “YidingNumber” when it can be obtained by one of the following two rules.

Rule 1: The positive integer 1 is a “YidingNumber”.
Rule 2: If n is a “YidingNumber”, then 5n+13, 13n+5, 5n−13, 13n−5 are also “YidingNumbers”.

Now, given a positive integer n, please determine it is a “Yiding Number” or not.

Input
There is an integer T in the first line, indicating that there are T test cases;

For the next T lines, each line contains a positive integer n(n<=1000000).

Output
For each test cases, output “Yes” if n is a “YidingNumber”, otherwise output “No”.

Sample Input
2
18
100

Sample Output
Yes
No

Source
"红旗杯"第十四届东北地区大学生程序设计竞赛

解题思路
总体的思路就是倒推出1就是yd数,用的是递归的方法。

AC

#include<iostream>
using namespace std;

bool calculate(int n) {
	if (n == 1)return true;
	bool f1 = false, f2 = false, f3 = false, f4 = false;
	if ((n - 13) % 5 == 0 && n > 13) {
		f1 = calculate((n - 13) / 5);
	}

	if ((n + 13) % 5 == 0 && n > -13) {
		f2 = calculate((n + 13) / 5);
	}

	if ((n + 5) % 13 == 0 && n > -5) {
		f3 = calculate((n + 5) / 13);
	}

	if ((n - 5) % 13 == 0 && n > 5) {
		f4 = calculate((n - 5) / 13);
	}

	return f1 || f2 || f3 || f4;//只要有一种运算方式能够最后算出1即为yd

}



int main()
{
	int l, n;
	while (cin >> l) {
		while (l--) {
			cin >> n;
			if (calculate(n) == true)cout << "Yes" << endl;
			else cout << "No" << endl;
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值