poj_3210 Coins

来源:互联网 发布:刀具半径补偿编程 编辑:程序博客网 时间:2024/06/05 19:33

题目链接:http://poj.org/problem?id=3210

 

//C++代码//若n为偶数//1:若初始状态为偶数正面+偶数反面,要想变成全正或全反,翻转次数必为偶数//2:若初始状态为奇数正面+奇数反面,要想变成全正或全反,翻转次数必为奇数//因此,无法得到一个确定的翻转次数x,使得对任意初始状态均可通过x次翻转变成全正或全反,故应输出"No Solution!"//若n为奇数//初始状态可能为偶数正面+奇数反面或偶数反面+奇数正面//由于上述两种初始状态可以看成是等价的,故以下只考虑偶数正面+奇数反面的情况//1:若初始状态为全反,翻转次数为0,2,4,...或n,n+2,n+4,...//2:若初始状态为(n-1)正+1反,翻转次数为n-1,n+1,n+3,...或1,3,5,...//由1和2可知,若翻转次数为偶数,则至少为n-1,若翻转次数为奇数,则至少为n//3:对于初始状态2正+(n-2)反,4正+(n-4)反,...,(n-3)正+3反,通过n-1次翻转均可变为全反//因此,当n为奇数时,最少翻转次数为n-1#include<iostream>using namespace std;int main(){int n;while(cin>>n,n){if(n&1) cout<<n-1<<endl;else cout<<"No Solution!"<<endl;}return 0;}