欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 码题集——魔数、A的B次方、网球比赛、三角形、点与线段的关系

码题集——魔数、A的B次方、网球比赛、三角形、点与线段的关系

2025/5/15 7:57:09 来源:https://blog.csdn.net/2301_80037953/article/details/147957397  浏览:    关键词:码题集——魔数、A的B次方、网球比赛、三角形、点与线段的关系

目录

MT1173 魔数

 MT1174 A的B次方

MT1175 网球比赛

 MT1177 三角形

MT1178 点与线段的关系


MT1173 魔数

一个数字,把他乘以二,会得到一个新的数字,如果这个新数字依然由原数中那些数字组成,就称原数为一个魔数。输入正整数N,检查它是否是一个魔数,输出YES或者NO。

格式

输入格式:输入正整数N

输出格式:输出YES或者NO

样例 1

输入:142857

输出:YES

思路:数由0~9组成,所以可以使用数组,将数组下标设为某数位,值为该数位数的个数,再进行遍历判断两个数组的各个位置的值是否相同。

此方法可以满足题目隐含条件,即每个数字出现的次数与原来数字出现次数相同

注意!!数组一定要初始化为0,如果不将其初始化,当该数不存在某数时系统会为其值随机生成一个数,会影响后续的判断

#include<bits/stdc++.h> using namespace std;int main( )
{int n;cin>>n;int m=n*2;int a[10]={0},b[10]={0};//一定要初始化为0//因为该数不一定有某数,此时系统会随机生成数字,会影响结果的判断while(n){a[n%10]++;n/=10;}while(m){b[m%10]++;m/=10;}for(int i=0;i<9;i++)if(a[i]!=b[i]){cout<<"NO";return 0;}cout<<"YES";return 0;
}

 MT1174 A的B次方

输入正整数N,判断它是否可以表示为A的B次方,其中B>1,A>0,都是整数。输出YES或者NO。

格式

输入格式:输入正整数N

输出格式:输出YES或者NO

样例 1

输入:6

输出:NO

能通过所有样例:

#include<bits/stdc++.h> using namespace std;int n;int main( )
{cin>>n;for(int i=1;i<1000;i++)for(int j=2;j<1000;j++)if(pow(i,j)==n){cout<<"YES";return 0;}cout<<"NO";return 0;
}

第三个样例超时,不知道为什么: 

#include<bits/stdc++.h> using namespace std;int n;bool check(int x)
{int tmp=1;while(1){tmp*=x;if(tmp==n)return true;if(tmp>n)return false;}
}
int main( )
{cin>>n;if(n==1){cout<<"YES";return 0;}for(int i=2;i<=n/2;i++)if(check(i)){cout<<"YES";return 0;} cout<<"NO";return 0;
}

MT1175 网球比赛

两个网球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三对赛手的名单。

格式

输入格式:无

输出格式:分3行输出,见样例

样例 1

输入:无

输出:

a with z
b with x
c with y

思路:

分别设两个数组,将a,b,c和x,y,z都看作0,1,2,此时在循环中又都看做i,j,k

 易知,i!=j && i!=k && j!=k

又有a不与x比,c不与x,z比,则i!=0,k!=0,k!=2

#include<bits/stdc++.h> using namespace std;int n;int main( )
{char a[3]={'a','b','c'};char b[3]={'x','y','z'};for(int i=0;i<3;i++)for(int j=0;j<3;j++)for(int k=0;k<3;k++)if(i!=j&&i!=k&&j!=k&&i!=0&&k!=0&&k!=2){cout<<a[0]<<" with "<<b[i]<<endl;cout<<a[1]<<" with "<<b[j]<<endl;cout<<a[2]<<" with "<<b[k]<<endl;}return 0;
}

 MT1177 三角形

输入三角形的三个顶点坐标,和点N的坐标。判断N是否位于三角形内,输出YES或者NO。

格式

输入格式:

第一行输入三角形的三个顶点坐标(x1,y1),(x2,y2)和(x3,y3),第二行输入点N的坐标,整型,空格分隔。

输出格式:输出YES或者NO

样例 1

输入:

0 0 20 0 10 30  
10 15

输出:YES

思路:

1.面积法:

        将该点与三角相连,算出三个三角形的面积并相加,判断其是否小于等于该三角形面积(不是等于,当点在线上时面积是0) 

2.同向法(叉乘法):

3.重心坐标法:

 面积法:

#include<bits/stdc++.h> using namespace std;int n;double check(int x1,int y1,int x2,int y2,int x3,int y3)
{return abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2))/2.0;
}
int main( )
{int x1,y1,x2,y2,x3,y3;cin>>x1>>y1>>x2>>y2>>x3>>y3;int a,b;cin>>a>>b;double s1=check(x1,y1,x2,y2,a,b);double s2=check(x1,y1,x3,y3,a,b);double s3=check(x3,y3,x2,y2,a,b);double s=check(x1,y1,x2,y2,x3,y3);if(s1+s2+s3<=s)cout<<"YES";elsecout<<"NO";return 0;
}

MT1178 点与线段的关系

输入线段的2个端点的坐标值x和y,再输入第3个点的坐标,判断点在不在线段上,输出YES或者NO。

格式

输入格式:按照先起点(x,y)再终点(x,y)的次序。第二行输入第3个点的坐标。坐标整型。第一行两点之间空格,如样例所示。

输出格式:输出YES或者NO

样例 1

输入:

(-20,20) (-20,-10)
(0,0) 

输出:NO

思路:

判断是否在线段上:

1.中间一点与旁边两个距离之和等于线段长度。

2. 向量法

注意!!易错点:

没有说是整型一定要以实数输入。

输入格式:

错的:

    double x1,y1,x2,y2;
    double a,b;
    scanf("(%lf,%lf) (%lf,%lf)",&x1,&y1,&x2,&y2);
    scanf("(%lf,%lf)",&a,&b);

对的:

    double x1,y1,x2,y2;
    double a,b;
    scanf("(%lf,%lf) (%lf,%lf) \n (%lf,%lf)",&x1,&y1,&x2,&y2,&a,&b); 

#include<bits/stdc++.h>
using namespace std;int main()
{double x1,y1,x2,y2;double a,b;scanf("(%lf,%lf) (%lf,%lf)",&x1,&y1,&x2,&y2);scanf("(%lf,%lf)",&a,&b);double l=sqrt(pow((x1-x2),2.0)+pow((y1-y2),2.0));double l1=sqrt(pow(x1-a,2.0)+pow(y1-b,2.0));double l2=sqrt(pow(x2-a,2.0)+pow(y2-b,2.0));if(l1+l2==l)cout<<"YES";elsecout<<"NO";return 0;
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词