归纳算法——硬币翻转问题
题:有任意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");}while(is_even(y)==0);x = N/g;printf("初始状态:\n");for(j=0;j<N;j++){s[j]='*';printf("%3c",'*');}printf("\n\n");turn_over(N,n,x);return 0;}int gcb(int a,int b) //求两个数的最大公约数
{int c;if(b>a){c = a;a = b;b = c;}while(b != 0){c = a%b;a = b;b = c;}return a;
}int is_even(int a) //判断是否为偶数,是则返回0
{while(a > 0){a = a-2;}return a;
}int turn_over(int N,int n,int x)
/*实现翻转函数*/
{int i,j,k;for(i = 0;i<x;i++){j = N/x*(i); //第i+1步翻转的起始位置printf("第%d步:\n",i+1);getch();for(k=1;k<=n;k++) //k计数作用,即每次从s[j]开始翻转n个{if(s[j]=='0')s[j] = '*';elses[j] = '0';j = (j+1)%N; //j到达上限,但没翻转够n个则从头翻转}for(j = 0;j<N;j++)printf("%3c",s[j]);printf("\n\n");}return 0;
}
是比较简单的,应该不会有疑问
归纳算法——硬币翻转问题相关推荐
- 洛谷 洛谷 P2708 硬币翻转(高端算法)
//DAY3.B //题源:洛谷 P2708 硬币翻转 //原题链接:https://www.luogu.com.cn/problem/P2708 #include<stdio.h> #i ...
- 算法题 - 翻转硬币 - Python
问题描述: 翻转硬币 小明的面前有一块长度为N的正方形棋盘,共有N*N个方格,在棋盘的每个格子上都放有一块硬币,要么正面朝上(以0表示),要么背面朝上(以1表示). 小明可以任意选择一列,将列上的硬币 ...
- python图像分类实验总结_图像分类的5种技术,总结并归纳算法、实现方式,并进行实验验证...
本文为你介绍图像分类的5种技术,总结并归纳算法.实现方式,并进行实验验证. 图像分类问题就是从固定的一组分类中,给输入图像分配标签的任务.这是计算机视觉的核心问题之一,尽管它看似简单,却在实际生活中有 ...
- 洛谷——P1146 硬币翻转
P1146 硬币翻转 题目描述 在桌面上有一排硬币,共NN枚,每一枚硬币均为正面朝上.现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1N−1枚硬币(正面向上的被翻转为反面向上,反之亦然). ...
- 洛谷1146 硬币翻转
题目描述 在桌面上有一排硬币,共NN枚,每一枚硬币均为正面朝上.现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1N−1枚硬币(正面向上的被翻转为反面向上,反之亦然).求一个最短的操作序列( ...
- 试题 算法训练 翻转旋转变换
试题 算法训练 翻转旋转变换 资源限制 内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 现在有一张n行m列的由" ...
- 洛谷 P2708 硬币翻转
P2708 硬币翻转 时间限制1.00s 内存限制125.00MB 题目描述 从前有很多个硬币摆在一行,有正面朝上的,也有背面朝上的.正面朝上的用1表示,背面朝上的用0表示.现在要求从这行的第一个硬币 ...
- P2708 硬币翻转——题解2020.10.11
P2708 硬币翻转 思路分析 定义一个一维字符型数组 a[ ] 存放若干硬币的正反情况,'1' 表示正面,'2'表示反面: 进行一次操作允许将前 n 个硬币翻面,要使操作的次数最少,每次操作须只对正 ...
- android 硬币翻转动画,使用Android标准动画显示正在翻转的硬币的两面
我非常接近制作"硬币翻转"动画,但是由于当前动画系统的局限性(错误?) – 我无法找到一种方法来显示硬币在空中翻转的两侧. 例如,我有以下动画.XML: android:share ...
最新文章
- Nat. Genet. | 基于CRISPRi技术检测增强子与启动子相互作用
- 数组作为函数参数进行传递
- apache与tomcat的联系
- 基于HT for Web的3D拓扑树的实现
- 程序员辞职的7个常用理由,你用的是哪一个?
- Day47 Django基础部分、路由配置、空间名称
- 【u204】高级砝码称重
- 取消搜索状态_百度搜索引擎全网推广通常有哪些账户?
- MATLAB图形插入标题
- shell date cal
- Sklearn——用Sklearn实现线性回归(LinearRegression)
- 几个C#控件出现闪烁的问题的解决方案(转)
- 线性调频信号(Chirp信号)公式
- 百度云云盘搜索助手可查询提取码 内置5个搜索引擎
- c计算机软考中级考什么,计算机软考中级考试内容
- 二、ArcGIS中shp裁剪dem
- 西安邮电大学计算机学院教师,西安邮电大学计算机学院
- HTML源码大放送1
- php normalize,normalize函数怎么使用
- c语言中puts的作用,puts和fputs函数及其区别,C语言puts和fputs函数详解