博主洛谷粉丝团:https://www.luogu.com.cn/team/87178
题目网址-博主原创
https://hydro.ac/d/Cyb888/p/T428809
题目-午睡时间
题目背景
凯伦正在为新的下午做准备!
题目描述
目前的时间是hh:mm,以24小时格式给出。正如你所知,凯伦喜欢回文,她相信当时间是回文的时候醒来是好运。
她应该至少睡几分钟,这样当她醒来时,时间就是回文了?
记住,回文是一个前后读相同内容的字符串。例如,05:39不是回文,因为05:39向后是93:50。另一方面,05:50是回文,因为05:50向后是05:50。
输入格式
仅有一行,包含一个格式为hh:mm的字符串( 00 ≤ h h ≤ 23 , 00 ≤ m m ≤ 59 00≤hh≤23, 00≤mm≤59 00≤hh≤23,00≤mm≤59 )
输出格式
仅输出一行一个整数,表示要使她醒来时的时间是回文,她所睡的最少时间。
样例 #1
样例输入 #1
05:39
样例输出 #1
11
提示
110个测试点!请慎重!
有110个测试点-但大家不用害怕
先分析题目
可以用数学直接搞定-就是一个数学题
直接上代码
解法1-利用字符串
#include <bits/stdc++.h>
using namespace std;
string s;
long long ans;
string r(string n)
{
string k="";
for (int i=n.size()-1;i>=0;i--) k+=n[i];
return k;
}
int main(){
cin>>s;
while (s!=r(s))
{
s[4]++;
if (s[4]>'9') s[4]='0',s[3]++;
if (s[3]>='6') s[3]=s[4]='0',s[1]++;
if (s[1]>'9') s[1]='0',s[0]++;
if (s[0]=='2'&&s[1]=='4') s[0]='0',s[1]='0';
ans++;
}
cout<<ans;
return 0;
}
解法2-直接上数学
#include<iostream>
#include<cmath>
using namespace std;
int main() {
int a, h, m, m1, m2, h1, h2, b=1, c=0;
scanf("%d:%d", &h, &m);
for (a = 0; c != b; a++) {
m1 = m % 10;
m2 = m / 10;
h1 = h % 10;
h2 = h / 10;
c = h * 100 + m;
b = m1 * 1000 + m2 * 100 + h1 * 10 + h2;
m = m + 1;
if (m == 60) {
h++;
m = 0;
}
if (h == 24) h = 0 ;
}
a = a - 1;
cout << a;
return 0;
}
大家看懂了请点赞,不懂欢迎私信哦
请大家支持一下博主哦!