三齿轮问题:三个齿轮啮合
来源:互联网 发布:淘宝首页在线制作 编辑:程序博客网 时间:2024/06/09 23:44
描述
如图在齿轮箱里三个齿轮互相衔接,某瞬间两对齿相遇,问各转多少圈后,这两对齿同时重逢。
输入
输入数据有多组,每组数据一行,每行为3个数a,b,c,分别代表三个齿轮的齿数(均为正整数)。数与数之间用空格隔开。当a,b,c中有一个为0时,输入结束。
输出
输出每组数据中,每个齿轮所转的圈数,用空格隔开。
样例输入
1 1 1
2 2 2
0 0 0
2 2 2
0 0 0
样例输出
1 1 1
1 1 1
1 1 1
方法1:#include<iostream>#include<cstdio>#include<string.h>#include<queue>#include<algorithm>#include<cmath>using namespace std;int max_public_num(int s1,int s2){ if(s1<s2){ int tem = s1; s1=s2; s2=tem; } while(s1%s2==0) { return s2; } return max_public_num(s2,s1%s2);}int min_public_num(int t1,int t2){ return t1*t2/max_public_num(t1,t2);}int main(){ int a,b,c; while(scanf("%d %d %d",&a,&b,&c)) { if((a==0)||(b==0)||(c==0)) break; int num=min_public_num((a,b),c); printf("%d %d %d\n",num/a,num/b,num/c); } return 0;}方法2:#include <iostream>#include <cmath>#include <algorithm>using namespace std;int main(){ int a[3],b[3]; // int x,y,z; int k,s,i; while(cin>>a[0]>>a[1]>>a[2]) { b[0]=a[0];b[1]=a[1];b[2]=a[2]; if(a[0]==0 || a[1]==0 || a[2]==0) {break;} sort(a,a+3); s=a[0]*a[1]*a[2]; k=a[2]; for(i=k;i<s;i++) { if(i%a[0]==0 && i%a[1]==0 && i%a[2]==0) break; } cout<<i/b[0]<<' '<<i/b[1]<<' '<<i/b[2]<<endl; } return 0;}
这道题初看起来没有头绪,但是只要好好想想就知道了,其实就是求三个数的最小公约数,三个齿轮的个数其实就是那个齿轮的周长,要三个齿轮再次相遇,也就是求三个数的最小公约数,只要想明白了这一点这道题就很容易了,
我用了两种方法来求,第一种是递归,先求出两个数的最小公约数,再两两相求,第二种就是直接求,找到三个数中最大的一个和这三个数的乘积,作为for循环的边界,依次枚举,找到最小公约数。
阅读全文
0 0
- 三齿轮问题:三个齿轮啮合
- 三齿轮问题(最大公约数)
- 齿轮转速比和啮合频率
- Solidworks如何让齿轮运动副保证持续啮合状态
- 组装齿轮问题
- 数据结构:组装齿轮问题
- 数齿轮
- 齿轮基础
- 【搜索】齿轮
- 【搜索】齿轮
- 数据结构——组装齿轮问题
- [NOIP模拟赛]同色齿轮问题
- 齿轮计算7.5版
- 复杂的齿轮动画
- 齿轮的基本知识
- CSS3:转动的齿轮
- 收货“齿轮魔方”
- LibGdx--GearJoint齿轮关节
- TLP280-4 与 TLP281-4区别
- UVA 12034 Race
- 查询及删除重复记录的SQL语句
- 20171103
- 阿里云的OSS对象存储 java
- 三齿轮问题:三个齿轮啮合
- LeetCode 654. Maximum Binary Tree
- 经典排序算法
- bzoj1049 [HAOI2006]数字序列 ( LIS + 区间DP)
- SpringBoot自动配置的实现原理
- 前序 中序 后序遍历
- 项目管理心得:一个项目经理的个人体会、经验总结
- 爆搜dfs
- Scikit-learn安装教程