POJ 3210 : Coins
2015-06-25 14:57
323 查看
POJ 3210 : Coins
Time Limit: 1000MS Memory Limit: 131072KTotal Submissions: 7001 Accepted: 4616
Description
Snoopy has three coins. One day he tossed them on a table then and tried to flip some of them so that they had either all heads or all tails facing up. After several attempts, he found that regardless of the initial configuration of the coins, he could always achieve the goal by doing exactly two flippings, under the condition that only one coin could be flipped each time and a coin could be flipped more than once. He also noticed that he could never succeed with less than two flippings.
Snoopy then wondered, if he had n coins, was there a minimum number x such that he could do exactly x flippings to satisfy his requirements?
Input
The input contains multiple test cases. Each test case consists of a single positive integer n (n < 10,000) on a separate line. A zero indicates the end of input and should not be processed.
Output
For each test case output a single line containing your answer without leading or trailing spaces. If the answer does not exist, output “No Solution!”
Sample Input
2
3
0
Sample Output
No Solution!
2
题意我觉得很难理解,意思是n个硬币,无论是怎么摆的(正面或是反面),能否找到一个最小值x,使得这n个硬币,通过x次翻转,必能到达全正或是全反的状态。能,则输出x的值。不能,则输出“No Solution!”
分情况讨论:
如果n是一个偶数:
假设向上的数量为偶数,则向下的数量也一定为偶数,所以这个最小值x也一定是偶数。
假设向上的数量是奇数,则向下的数量也是奇数,这个最小值x一定得是奇数。
此时。得到的x在两种情况中互相矛盾,所以偶数的话,要输出“No Solution!”
如果n是一个奇数:
其实n是一个奇数的话,只有一种情况了,向上的数量是m,向下的数量是n-m,两者一定一个奇数,一个偶数。此时向上即向下,向下即向上。
此时会发现偶数次翻转即可完成任务,只需将状态不同的两种硬币中,为偶数的数量的那一堆翻转即可,此时两堆硬币已经达到了同上或是同下,这时,多出来的反转次数,只需对一个硬币来回翻转,因为是偶数次,所以不影响最后状态了。
那么这个x最小是多少?
假设n个硬币,1个向上,n-1个向下。根据上面所述,这时需要n-1次翻转,这时是满足所有情况的最小值了。
代码:
[code]#include<iostream> using namespace std; int main() { int n; while(cin>>n) { if(n==0) break; if(n%2) { cout<<n-1<<endl; } else { cout<<"No Solution!"<<endl; } } return 0; }
相关文章推荐
- upper_bound和lower_bound的用法
- 编写一个排序函数,实现数字排序。排序方法由客户函数实现,函数参数个数为两个,两个参数的关系作为排序后的元素间的关系。
- POJ 3210 : Coins
- 变量存储类型
- iPhone的技术能力是如何领军业界的?
- Binary Tree Inorder Traversal
- OKHttp源码解析
- yii2实现邮件发送
- Android项目结构
- ODP.NET 之访问 Oracle 数据库
- WORD和WPS中英文混合的内容间距离很大怎么办?
- 基于C++11线程池
- Codeforces Round #309 (Div. 1) C. Love Triangles dfs
- Maven学习笔记(-)
- redis php 分页 ,总数,修改数量 倒计时
- sql遍历所有数据集
- Java Reflection(十一):动态代理
- Course Schedule
- SQlite入门理解
- FFT算法在单片机中的使用&&LCD12864驱动