• 暑期实践日志(二)


    这道题的思路是,将题目中所描述的齿轮看成是圆,其中两个齿轮相互咬合则是两个圆相切,那么根据判断两个圆相切的方法来判断两个齿轮间是否咬合。其中还会用到齿轮传动的规律,即传动轮的速度由主动轮来决定,根据该题的描述可知所有齿轮中只有一个是主动轮,那么其他齿轮的速度都都它决定,随度的比值就是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;
    }
  • 相关阅读:
    自定义圆形图片控件
    获取手机屏幕长宽
    xml文件解析和序列化
    Java开发基础知识之学习篇——==和equals
    Java开发基础知识之学习篇——成员变量与局部变量
    Java开发基础知识之学习篇——String
    Java开发基础知识之认知篇——java初识
    Java开发基础知识之规范篇——命名规范
    Java开发基础知识之规范篇——排版规范
    nginx高性能配置的几个重要参数(java web应用)
  • 原文地址:https://www.cnblogs.com/hbutACMER/p/4641740.html
Copyright © 2020-2023  润新知