描述:369 寝室是比较特殊的寝室,因为别的寝室都住了四个人,而 369 寝室只有三个人。也因为这个原因,寝室里的三位同学感情特别好。但是,毕业在即,三位小伙伴马上要分别。为了在未来的某个日子可以见面,三位小伙伴有了一个约定,假设在未来的某一年,三位小伙伴的年龄的末尾正好出现 3、6、9 三个数,那么他们会再次相聚。 问题来了,假设今年三位小伙伴的年龄分别是 x,y,z,那么,他们三人最早几年后可以相聚呢?
输入:输入数据包括三个整数 x,y,z,分别表示三位伙伴的年龄。
输出:如果小伙伴最早在 n 年后可以相见(不包括当前这一年),那么请输出 n;如果不存在这样的情况,输出:'so sad!'
样例:输入:25 22 28。输出:1
今天同学让我做这道题,一开始低估了,以为SO EASY,结果……真是SO SAD!
还好终于做出来了(不知道对不对),希望可以帮到同学
思路:
先把有两个重复数字的数据删去,输出so sad!,然后直接退出程序(不用函数!!)
测试数据:12 12 12 12 12 13
再把每个数的个位取出,判断是否等于3,6,9并且另外1、2个数不等于3,6,9
测试数据:13 14 17 13 56 78
再把某个值求出来(没办法解释它到底是个啥),并逐个判断个位是否为3,6,9
测试数据:12 16 20 12 18 24
最后则是输出再见年份
测试数据:12 15 18 25 142 238(用来测试百、十位不同的情况,虽然很夸张……)
代码:
#include<bits/stdc++.h>
using namespace std;
int x,y,z,x1,y_1,z1,cnt=0,flag=1;
int a,b,c,a_b,b_c,a_c,asd,bsd,csd;
int main(){cin>>x>>y>>z;if(x==y){cout<<"so sad!"<<endl;flag=0;return 0;}if(y==z){cout<<"so sad!"<<endl;flag=0;return 0;}if(z==x){cout<<"so sad!"<<endl;flag=0;return 0;}a=x%10;b=y%10;c=z%10;if(a!=3&&a!=6&&a!=9){if(b==3||b==6||b==9){cout<<"so sad!"<<endl;flag=0;return 0;}else if(b!=3&&b!=6&&b!=9){if(c==3||c==6||c==9){cout<<"so sad!"<<endl;flag=0;return 0;}}}else if(a==3||a==6||a==9){if(b!=3&&b!=6&&b!=9){cout<<"so sad!"<<endl;flag=0;return 0;}else if(b==3||b==6||b==9){if(c!=3&&c!=6&&c!=9){cout<<"so sad!"<<endl;flag=0;return 0;}}}a_b=max(a,b)-min(a,b);b_c=max(b,c)-min(b,c);a_c=max(a,c)-min(a,c);asd=max(a_b,b_c)-min(a_b,b_c);bsd=max(b_c,a_c)-min(b_c,a_c);csd=max(a_c,a_b)-min(a_c,a_b);if(asd%10!=3&&asd%10!=6&&asd%10!=0&&bsd%10!=3&&bsd%10!=6&&bsd%10!=0&&csd%10!=3&&csd%10!=6&&csd%10!=0){flag=0;cout<<"so sad!"<<endl;return 0;}while(flag==1){x++;y++;z++;cnt++;x1=x%10;y_1=y%10;z1=z%10;if(x1==3){if(y_1==6){if(z1==9)flag==0;cout<<cnt;return 0;}if(y_1==9){if(z1==6)flag==0;cout<<cnt;return 0;}}else if(x1==6){if(y_1==3){if(z1==9)flag==0;cout<<cnt;return 0;}if(y_1==9){if(z1==3)flag==0;cout<<cnt;return 0;}}else if(x1==9){if(y_1==3){if(z1==6)flag==0;cout<<cnt;return 0;}if(y_1==6){if(z1==3)flag==0;cout<<cnt;return 0;}}}return 0;
}
显然很长(大佬帮忙优化😅)
如有错误,请及时指出~~