博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2104
阅读量:5261 次
发布时间:2019-06-14

本文共 1323 字,大约阅读时间需要 4 分钟。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2104

题目大意:n个人围成一圈玩藏手绢,每个人背后都有box,也就是n个boxes,Haha喜欢从头开始,每隔m-1个人来找,问Haha能否把所有的箱子全部找一遍,找得出则输出YES,找不出则输出POOR Haha

解法:n和m互质即可,互质条件为最大公约数为1,求最大公约数的方法有辗转相除法,相减法,穷举法

 

gcd方法:

辗转相除法:两数n和m,n > m,取n除以m,即n做被除数,m做除数;

      若余数为0,则最大公约数为m;

      若余数不为0,则m做被除数,余数i = n % m 做除数,继续求解,重复执行,直至余数为0,则本次除数和上一次的余数即为最大公约数。

 

相减法:两数n和m,n > m,取n - m;

    若结果为0,则最大公约数为m;

    若结果不为0,则令i = m - n, 取m - i,令m为被减数,i为减数,重复执行,直至余数为0,则本次减数和上一次余数即为最大公约数。

 

穷举法:这个嘛……诶……

    两数n和m,n > m,令m不断减1,找出令n除以m可以整除的最小值

    这名字很好听。

 

scanf和scanf_s也不知道什么鬼……找个时间搞清楚

太久没打了……取地址符&都忘记打了……不能老是打cin,还是打scanf吧

最后小心找不到是输出POOR Haha,不是NO,脑袋不清醒竟然弄了一个小时才发现!!!

#define _CRT_SECURE_NO_WARNINGS#include 
int main(){ long n, m; while (scanf("%d%d", &n, &m) != EOF) { //辗转相除法 if (n == -1 && m == -1) break; int i = n % m; if(m == 1){ printf("YES\n"); continue; } if (i != 0) { while (m % i != 0) { int k = i; i = m % i; m = k; } if (i == 1) printf("YES\n"); else printf("POOR Haha\n"); } else printf("POOR Haha\n"); } return 0;}

 

转载于:https://www.cnblogs.com/Elvis827/p/9045000.html

你可能感兴趣的文章
1037. 二哥买草
查看>>
miniui前端绑定枚举值
查看>>
2.Redis常用命令
查看>>
OOD沉思录3 类和对象的关系--使用关系
查看>>
构思一套自己的验证框架
查看>>
css3文本字体
查看>>
ListView在异步加载动态图片时,往往最后一项或几项被遮盖(IM场景居多)
查看>>
前端笔记4-1
查看>>
Oracle学习第三篇—多行函数
查看>>
阿里开源分布式事务解决方案 Fescar 全解析
查看>>
Day 9:双列集合Map及实现该接口的类的常用方法
查看>>
HDU 2852 KiKi's K-Number(树状数组+二分搜索)
查看>>
VirtualBox中使用ubuntu-16.04.1安装devstack的Controller节点
查看>>
【Python3之迭代器,生成器】
查看>>
打飞机游戏【来源于Crossin的编程教室 http://chuansong.me/account/crossincode 】
查看>>
spring AOP
查看>>
LSTM基础
查看>>
iOS 网络请求--- 配置info.plist文件
查看>>
ArcGIS10.3+Oracle12C+ArcGIS Server10.3安装布署(之二)
查看>>
如何处理遇到的错误-lammps
查看>>