输入:
8 5 33 8 11
题解:
#include <iostream>
using namespace std;
double ms[6];
double h, m, s, t1, t2;
double d1, d2, d3, dt1, dt2;//按照题意定义变量
int swap(int a, int b) {//自己写的交换函数
int temp = a;
a = b;
b = temp;//交换过程
}
void sort(double a[]) {//自己写的排序
for (int i=1; i<=5; i++) {
for (int j=i+1; j<=5; j++) {//循环交换最大值和最小值
if (a[j] > a[i]) {//如果比后面的数大
swap(a[j], a[i]);//交换两个数
}
}
}
}
int main(){
cin >> h >> m >> s >> t1 >> t2;//输入h时,m分,s秒,出发位置t1,目的地t2
d1 = (h + m / 60 + s / 3600) / 12;//如果h是12且s&&m大于0,就减1,保证h小于12
if(d1 > 1) {
d1--;
}
d2 = (m + s / 60) / 60;//同h
if(d2 > 1) {
d2--;
}
d3 = s / 60;
dt1 = t1 / 12;//米莎的位置
dt2 = t2 / 12;//目标的位置
ms[1] = d1;
ms[2] = d2;
ms[3] = d3;
ms[4] = dt1;
ms[5] = dt2;
sort(ms);//sort对浮点数排序会错,所以自己写了一个sort
if((ms[1] == dt1 && ms[2] == dt2) || (ms[2] == dt1 && ms[1] == dt2)
|| (ms[2] == dt1 && ms[3] == dt2) || (ms[3] == dt1 && ms[2] == dt2)
|| (ms[4] == dt1 && ms[3] == dt2) || (ms[3] == dt1 && ms[4] == dt2)
|| (ms[5] == dt1 && ms[4] == dt2) || (ms[4] == dt1 && ms[5] == dt2)
|| (ms[5] == dt1 && ms[1] == dt2) || (ms[1] == dt1 && ms[5] == dt2)
) {//强制if判断是否相邻
cout << "YES";//如果能到t2(相邻)就输出Yes
}
else {
cout << "NO";//如果到不了t2(不相邻)就输出No
}
return 0;//完美结束
}
我的
#include<bits/stdc++.h>
using namespace std;
int m,s,t1,t2,mz[61],h,maxn,minn;
bool ok=true;
int main()
{
cin>>h>>m>>s>>t1>>t2;
mz[h*5]=1;
mz[m]=1;
mz[s]=1;
mz[t1*5]=2;
mz[t2*5]=2;
maxn=max(t1,t2)*5;
minn=min(t1,t2)*5;
for(int i=minn;i<=maxn;i++)
{
if(mz[i]==1)
break;
if(i==maxn)
{
cout<<"YES";
return 0;
}
}
for(int i=minn;i>=1;i--)
{
if(mz[i]==1)
{
cout<<"NO";
return 0;
}
}
for(int i=maxn;i<=60;i++)
{
if(mz[i]==1)
{
cout<<"NO";
return 0;
}
}
cout<<"YES";
return 0;
/*for(int i=1;i<=60;i++)
cout<<mz[i];*/
}
为什么题解的输出 NO,而我的输出 YES ?
不应该就是 YES 吗?
图片解释如下: