91 条题解
-
-1
算法思路:
-
先将三个数排序,不过因为这里只有三个数,所以我们可以先找到最大的,再找到最小的。
-
然后将最大的和最小的相加即可。用总和减去这个和就得到了中间的数。再检查三个数是不是相邻的,即小数+1=中间数,中间数+1=大数。
-
同时注意maxx和minx的初始值设立,求最大值,maxx初始应该很小,求最小值,minx初始应该很大。
nums[1] = a; nums[2] = b; nums[3] = c; for (int i = 1; i <= 3; i++) { if (nums[i] > maxx) { maxx = nums[i]; // 找到最大值 } if (nums[i] < minx) { minx = nums[i]; // 找到最小值 } }
和减去最大值和最小值的和不就是中间值吗?
判断 minx 和 midx 和 maxx 是否相邻,相邻的两个数的差肯定是1
midx = (a + b + c) - maxx - minx; if (minx + 1 == midx && midx + 1 == maxx) { cout << "TRUE" << endl; } else { cout << "FALSE" << endl; }
-
-
-2
-
-2
#include <iostream> using namespace std; int main() { int a,b,c; cin >> a >> b >> c; if ((ab-1 and bc-1)|| (ac-1 and cb-1)||(ab+1 and bc+1)|| (ac+1 and cb+1)) { cout << "TRUE"; } else if ((ba-1 and ac-1)|| (bc-1 and ca-1)||(bc+1 and ca+1)|| (ba+1 and ac+1)) { cout << "TRUE"; } else if ((cb-1 and ba-1)|| (ca-1 and ab-1)||(cb+1 and ba+1)|| (ca+1 and cb+1)) { cout << "TRUE"; } else { cout << "FALSE"; } return 0; }
-
-2
比较简洁的方式,先创建数组,然后发现只要是连续的三个整数,它们的和除以3都等于0。所以我们先用一个for循环输入数组,再进行求和,但这里精妙的地方在于,如果数组中a[1]-a[0]>2,说明已经不是连续的整数了(可以思考一下),所以,在求和的同时进行判断,上述情况不进行求和,最后用if语句判断如果取余3=0,那么就是连续的啦!
#include <iostream> using namespace std; int main() { int a[3],sum=0; for(int i=0;i<=2;i++) { cin>>a[i]; } for(int j=0;j<=2;j++) { if(a[j+1]-a[j]<=2) sum+=a[j]; } if(sum%3==0) { cout<<"TRUE"; } else { cout<<"FALSE"; } return 0;
-
-2
#include <bits/stdc++.h> using namespace std; int main() { int a,b,c,z,j,k; cin>>a>>b>>c; if (a>b && b>c) { z=a; j=b; k=c; } else if (a>c && c>b) { z=a; j=c; k=b; } else if (b>a && a>c) { z=b; j=a; k=c; } else if (b>c && c>a) { z=b; j=c; k=a; } else if (c>b && b>a) { z=c; j=b; k=a; } else if (c>a && a>b) { z=c; j=a; k=b; } if (z-j==1 && j-k==1) { cout<<"TRUE"<<endl; } else { cout<<"FALSE"<<endl; } return 0; }
信息
- ID
- 36
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 6
- 标签
- 递交数
- 10472
- 已通过
- 3084
- 上传者