首页 > ACM题库 > HDU-杭电 > hdu 2554 N对数的排列问题-数论应用-[解题报告]C++
2014
02-10

hdu 2554 N对数的排列问题-数论应用-[解题报告]C++

N对数的排列问题

问题描述 :

有N对双胞胎,他们的年龄分别是1,2,3,……,N岁,他们手拉手排成一队到野外去玩,要经过一根独木桥,为了安全起见,要求年龄大的和年龄小的排在一起,好让年龄大的保护年龄小的,然后从头到尾,每个人报告自己的年龄,就得到了一个年龄的序列。比如有4对双胞胎,他们报出来的年龄序列是:41312432。突然,他们中间最聪明的小明发现了一个有趣的现象,原来,这个年龄序列有一个规律,两个1中间有1个数,两个2中间有2个数,两个3中间有3个数,两个4中间有4个数。但是,如果是2对双胞胎,那么无论他们怎么排年龄序列,都不能满足这个规律。
你的任务是,对于给定的N对双胞胎,是否有一个年龄序列,满足这一规律,如果是,就输出Y,如果没有,输出N。

输入:

共有若干行,每行一个正整数N<100000,表示双胞胎的数量;如果N=0,表示结束。

输出:

共有若干行,每行一个正整数N<100000,表示双胞胎的数量;如果N=0,表示结束。

样例输入:

4
2
1309
0

样例输出:

Y
N
N

1.题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2554

 

2.详细解释参考这里:

http://www.cnblogs.com/XDJjy/archive/2013/05/18/3085098.html

 

3.参考代码:

 

#include <stdio.h>

int main()
{
	int n;
	while(scanf("%d",&n) && n)
	{
		if((3*n-1)%4==0 || n%4==0)
			printf("Y\n");
		else
			printf("N\n");
	}
	return 0;
}

 

解题转自:http://blog.csdn.net/x283930450/article/details/10018651


  1. 为什么for循环找到的i一定是素数叻,而且约数定理说的是n=p1^a1*p2^a2*p3^a3*…*pk^ak,而你每次取余都用的是原来的m,也就是n

  2. 5.1处,反了;“上一个操作符的优先级比操作符ch的优先级大,或栈是空的就入栈。”如代码所述,应为“上一个操作符的优先级比操作符ch的优先级小,或栈是空的就入栈。”

  3. Thanks for taking the time to examine this, I really feel strongly about it and love studying a lot more on this topic. If possible, as you acquire experience