题目有很大的迷惑性,虽然题意不难,但是会让人感觉做起来不简单,不知从何下手,如果直接搜索判断,直觉告诉你,一定超时,怎么办,从小的数据找规律.
对于偶数个硬币,如果全部相同则一定只能翻转偶数次,当只有一个与其他相反时,则必须翻转奇数次,显然两者矛盾,所以对于偶数个硬币,一定无解.
对于奇数个硬币,采用逐个尝试,就会发现规律,首先,如果全部相同则一定是翻转偶数次,当只有一个不同时,又要翻转偶数次,如果翻转这个不同的硬币,偶数次后,任然不同,那么只有对剩下的n-1个硬币各翻转一次,所有就大胆的推测奇数各硬币时翻转n-1次;并且用3,5,7,9进行验证均成立,就赌一下吧,结果AC了!
Source:
#include<iostream>
using namespace std;
int main()
{
int n;
while(1)
{
cin>>n;
if(n==0)break;
if(n%2==0)cout<<"No Solution!"<<endl;
else cout<<n-1<<endl;
}
return 0;
}