C:
解题思路:
遍历最小的数,将两个数的每一位相加作比较,如果大于等于10直接输出Hard,遍历完后都小于10就输出Easy,题目本身也很Easy,注意数据范围,int会爆。
下面是c++代码:
#include<iostream>
using namespace std;
int main()
{
unsigned long long a,b,A,B;
int aL = 0,bL = 0,index = 1;
cin >> a >> b;
A = a,B = b;
if(a > b){
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
while(A != 0){
A /= 10;
aL++;
}
while(B != 0){
B /= 10;
bL++;
}
for(int i = 1;i <= aL;i++){
if(a % 10 + b % 10 >= 10){
index = 0;
break;
}
a /= 10,b /= 10;
}
if(index == 1){
cout << "Easy";
}else{
cout << "Hard";
}
return 0;
}
E:
解题思路:
将三天成绩加起来存到一个数组中,再创建一个数组存成绩,然后排序第一个数组,遍历第二个数组,当某个人的成绩 + 300大于排序数组的第n - k项,输出Yes,否则No。
下面是c++代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,k,a,b,c;
cin >> n >> k;
int * arr =new int[n];
int * brr = new int[n];
for(int i = 0;i < n;i++){
cin >> a >> b >> c;
arr[i] = a + b + c;
brr[i] = arr[i];
}
sort(arr,arr + n);
for(int i = 0;i < n;i++){
if(brr[i] + 300 >= arr[n - k]){
cout << "Yes" << endl;
}else{
cout << "No" << endl;
}
}
return 0;
}
F:
解题思路:
创建一个数组,0表示不知道秘密,1表示知道brr[arr[i] - 1]表示这个小伙伴把秘密分享给了第i - 1个小伙伴,就加加,知道秘密的人数加一,如果brr[i]大于1说明消息又传回来了,结束循环,输出知道秘密的数量
下面是c++代码:
#include<iostream>
using namespace std;
int main()
{
int n,x,sum = 1;
cin >> n >> x;
int * arr = new int[n];
int * brr = new int[n]{0};
brr[x - 1] = 1;
for(int i = 0;i < n;i++){
cin >> arr[i];
}
while(1){
brr[arr[x - 1] - 1]++;
if(brr[arr[x - 1] - 1] > 1){
break;
}
x = arr[x - 1];
sum++;
}
cout << sum;
return 0;
}