zoukankan      html  css  js  c++  java
  • 暑期实践日志(二)

    这道题的思路是,将题目中所描述的齿轮看成是圆,其中两个齿轮相互咬合则是两个圆相切,那么根据判断两个圆相切的方法来判断两个齿轮间是否咬合。其中还会用到齿轮传动的规律,即传动轮的速度由主动轮来决定,根据该题的描述可知所有齿轮中只有一个是主动轮,那么其他齿轮的速度都都它决定,随度的比值就是R1/Ri。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <cstdlib>
    #include <algorithm>
    using namespace std;
    int x[1003];
    int y[1003];
    int r[1003];
    int flag[1003];
    int queue[1003];
    int gcd(int a,int b)
    {
        return b==0?a:gcd(b,a%b);
    }
    int main()
    {
        //freopen("all.in","r",stdin);
        //freopen("out.txt","w",stdout);
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n;
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            {
                scanf("%d%d%d",&x[i],&y[i],&r[i]);
                flag[i]=0;
            }
            flag[1]=1;
            queue[0]=1;
            int head=0,tail=1;
            while(head!=tail)
            {
                for(int i=2;i<=n;i++)
                {
                    if(queue[head]==i)
                        continue;
                    if(flag[i]!=0)
                        continue;
                    int t1=(x[queue[head]]-x[i])*(x[queue[head]]-x[i])+(y[queue[head]]-y[i])*(y[queue[head]]-y[i]);
                    int t2=(r[queue[head]]+r[i])*(r[queue[head]]+r[i]);
                    if(t1==t2)
                    {
                        flag[i]=-flag[queue[head]];
                        queue[tail]=i;
                        tail++;
                    }
                }
                head++;
            }
            for(int i=1;i<=n;i++)
            {
              if(flag[i]==0)
                printf("not moving
    ");
              else if(flag[i]==1)
              {
                int t=gcd(r[1],r[i]);
                if(r[i]/t==1)
                    printf("%d ",r[1]/t);
                else
                {
                    printf("%d/",r[1]/t);
                    printf("%d ",r[i]/t);
                }
                printf("clockwise
    ");
              }
              else
              {
                int t=gcd(r[1],r[i]);
                if(r[i]/t==1)
                    printf("%d ",r[1]/t);
                else
                {
                    printf("%d/",r[1]/t);
                    printf("%d ",r[i]/t);
                }
                printf("counterclockwise
    ");
              }
            }
        }
        return 0;
    }
  • 相关阅读:
    在mysql中,DATE_FORMAT(date, format) 函数根据format字符串格式化date值。
    FTPClient下载文件遇到的坑
    FTP链接的主被动模式:500 Illegal PORT command的问题
    Shell脚本入门
    Ubuntu18.04出现启动紫屏卡死不弹登录框问题
    Linux如何关闭命令行正在执行的程序
    VMWare14Pro及Ubuntu18.04安装Linux
    Ubuntu虚拟机下Linux安装及安装后基本配置设置
    Ubuntu 18.04 软件源修改成国内源(文件或界面形式)
    VMware虚拟机删除已经安装的linux操作系统
  • 原文地址:https://www.cnblogs.com/hbutACMER/p/4641740.html
Copyright © 2011-2022 走看看