JeiMin @ 2024-08-06 00:03:36
1.暴力能过但超级复杂,暴力的话要开3500000的长度(仅存个数的),仔细想一想优化;
2.回文的判断可以使用字符串,会好写一点:
bool hui(string s) {
// 检查字符串是否是回文
int left = 0,right=s.size()-1;
while (left < right) {
if (s[left++] != s[right--]) {
return false;
}
}
return true;
}
3.养成好习惯,写完再看题解哦。
羸弱求各位点点赞吧。
by xjsmsms @ 2024-08-06 07:18:35
@JeiMin
请勿将题解/思路等发在讨论区
by abc20131113 @ 2024-08-18 17:38:26
#include<bits/stdc++.h>
using namespace std;
int n[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int f,t;
cin>>f>>t;
int y=f/10000;
int m=f%10000/100;
int r=f%100;
int sum=0;
while(y*10000+m*100+r<=t){
if(y%400==0||y%100!=0&&y%4==0){
n[2]=29;
}
else{
n[2]=28;
}
int a,b,c,d;
d=m/10;
c=m%10;
b=r/10;
a=r%10;
if(d+10*c+100*b+1000*a==y){
sum++;
}
if(d+1>n[m]){
d=0;
m++;
}
if(m>12){
m=1;
y++;
}
r++;
}
cout<<sum;
return 0;
}
这咋写
by abc20131113 @ 2024-08-18 17:56:40
@JeiMin 啊
by JeiMin @ 2024-08-18 22:44:16
#include<bits/stdc++.h>
using namespace std;
int n[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
int f, t;
cin >> f >> t;
// 初始化起始日期的年、月、日
int fy = f / 10000;
int fm = (f % 10000) / 100;
int fd = f % 100;
int sum = 0;
// 遍历日期直到超过终止日期
while (f <= t) {
// 判断是否为闰年并设置2月的天数
if (fy % 400 == 0 || (fy % 100 != 0 && fy % 4 == 0)) {
n[2] = 29;
} else {
n[2] = 28;
}
// 提取当前日期的月和日,并转换为整数
int m = fm;
int d = fd;
// 提取月和日的每一位数字
int md = m / 10;
int md2 = m % 10;
int dd = d / 10;
int dd2 = d % 10;
// 检查是否为回文日期
if (md * 1000 + md2 * 100 + dd * 10 + dd2 == fy) {
sum++;
}
// 日期递增逻辑
fd++;
// 处理日期的进位
if (fd > n[fm]) {
fd = 1;
fm++;
if (fm > 12) {
fm = 1;
fy++;
}
}
// 更新当前日期f,以便下一次循环使用
f = fy * 10000 + fm * 100 + fd;
}
cout << sum << endl;
return 0;
}
@yunxinrui
1.日期递增逻辑:日期递增的逻辑不够清晰,且没有正确地更新f的值。在修改后的代码中添加了f的更新,以确保每次循环都处理下一个日期。
2.回文日期判断:代码中回文日期的判断条件似乎有误。更改为直接比较年月日和年是否构成回文。
3.变量命名:更改了一些变量名以提高代码的可读性。
4.逻辑结构:调整了循环的结构,使其更加清晰和易于理解。
by abc20131113 @ 2024-08-19 09:15:05
@JeiMin 谢谢