【NYoj】34 - 韩信点兵(CRT)
来源:互联网 发布:涩谷 涉谷 知乎 编辑:程序博客网 时间:2024/05/17 04:19
点击打开题目
韩信点兵
时间限制:3000 ms | 内存限制:65535 KB
难度:1
- 描述
- 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。
- 输入
- 输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7)。例如,输入:2 4 5
- 输出
- 输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89
- 样例输入
2 1 6
- 样例输出
41
- 来源
- 经典算法
- 上传者
- 首席执行官
记得学C语言的第一天我用for循环,边写边查bug写了半天最后解出来,那个兴奋啊!
还有两个多月就一年了,一年的时间把我从以前的小白变成了现在的小灰?what?你说小白的小灰是什么区别,好吧,话不多说,看图就知道了:
好了写代码之余偶尔抒发下感觉也是可以原谅的对吧。下面说正题:
这个题只是用中国剩余定理(CRT)小试牛刀而已,证明自己的理解还是挺清楚的,没有看之前打的模板自己按理解打下来了。
代码如下:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define CLR(a,b) memset(a,b,sizeof(a))#define INF 0x3f3f3f3fint GCD(int a,int b){return b == 0 ? a : GCD(b,a%b);}void exGCD(int a,int b,int &x,int &y){if (b == 0){x = 1;y = 0;return;}exGCD(b,a%b,y,x);y -= a / b * x;}int CRT(int *m,int *a,int n)//m表示除数,a为余数 {int M = 1;for (int i = 1 ; i <= n ; i++)M = M / GCD(M , m[i]) * m[i];//这里求最小公倍数int ans = 0;int x,y;for (int i = 1 ; i <= n ; i++){int Mi = M / m[i];exGCD(m[i],Mi,x,y);//求 Mi 模 m[i] 的逆元(即公式的 M^(-1)) ans = (ans + a[i] * Mi * y) % M;}return ans;}int main(){int m[4] = {0,3,5,7};int a[4];scanf ("%d %d %d",&a[1],&a[2],&a[3]);int ans = CRT(m,a,3);printf ("%d\n",ans);return 0;}
0 0
- 【NYoj】34 - 韩信点兵(CRT)
- NYOJ-34-韩信点兵(数论)
- nyoj-34 韩信点兵 (java版本)
- NYOJ-34 韩信点兵【数论】
- 韩信点兵 nyoj 34
- NYOJ 34 韩信点兵
- nyoj 34 韩信点兵
- nyoj 34 韩信点兵
- nyoj题目34:韩信点兵
- NYOJ 34 韩信点兵
- NYOJ 34 韩信点兵
- nyoj-34韩信点兵
- 【NYOJ】[34]韩信点兵
- NYOJ 34 韩信点兵
- nyoj 34 韩信点兵
- NYOJ-34韩信点兵
- NYOJ 34韩信点兵
- nyoj 34 韩信点兵
- SQL多表连接查询(详细实例)
- pip windows 离线安装. ok
- hdoj1272小希的迷宫
- CSS-Float(浮动)
- svn 命令行操作
- 【NYoj】34 - 韩信点兵(CRT)
- 【大话设计模式】设计模式系统学习大合集
- 一年很短,一天很长
- SpringMVC常用注解
- php字符串操作
- 双向链表——单链表改进之二
- HDOJ 5780 abs(枚举)
- 内部类和接口
- 操作系统