题:有任意N个硬币正面朝上,每次翻转n个硬币知道将N个硬币全部翻转成反面。(*表示正面,0表示反面)
源代码如下:
/*
**翻转硬币问题,设共有N个硬币,一次允许翻转n<N个,需翻转x步,每个硬币翻转y次,
**则N*y==n*x,即n/N==y/x,因为要翻转,y必须为奇数,判断n/N若为最简分数,如n不为奇数则不能翻转成功
**如果n为奇数,则x取最小值时为n=y,N=x;若n/N不是最简分数,化成最简分数n1/N1,按照上面的步骤
**判断,若n1为奇数则可以翻转。
*/
#include<stdio.h>
#include<string.h>
char s[100];
int gcb(int a,int b);
int is_even(int a);
int turn_over(int N,int n,int x);
int main()
{
int N,n,x,y,g;
int j;
printf("请输入硬币的个数:\n");
scanf("%d",&N);
do
{
printf("请输入一次翻转的硬币个数:\n");
scanf("%d",&n);
g = gcb(N,n);
y = n/g;
if(is_even(y)==0)
printf("不能翻转成功!\n");