1、握手问题
知识点:模拟
这道题很简单。但是不知道考试的时候有没有写错。一开始的43个人握手,仅需要两两握手,也就是从42个握手开始,而非43.很可惜。这道题没有拿稳这5分。也很有可能是这5分导致没有进决赛。
总结:
1、将题目要求的大的数值进行抽象出来,例如写成一个变量m,n。
2、然后,使用较小的数字,将m设置为5,n设置为3。
3、然后手算看看结果是否与程序相同。
4、相同的话,再使用题目要求的数值填入n和m中。
#include<bits/stdc++.h>
using namespace std;
long long cnt;
const int n = 50; // 总人数
const int m = 43; // 无需特殊处理的人数
int main()
{
// 先处理前面没有限制的43个人。 他们之间两两握手
for (int i = m-1; i >= 1; i--) // 注意这里不是43,而是42
{
cnt += i;
}
// 后处理有限制的7人 他们分别与上述43人握手
cnt += 43 * (n-m);
cout << cnt;
return 0;
}
2、小球反弹
看着很难,考试的时候直接放弃了,现在也没有去写正解。
3、好数
知识点:模拟
逻辑非常简单,10分钟不到就能够写出来。但是考试的时候很紧张,写了20分钟。没有很清晰的写出下标之间的关系,当时很乱。
最终结果:100分。折算后:10分
#include<bits/stdc++.h>
using namespace std;
int n;
int cnt;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
string str = to_string(i);
int len = str.size(); // 获取数字的长度
int b = 1; // 当前位数
int j;
for (j = len - 1; j >= 0; j--) // 从数字末尾开始判断
{
if (b % 2 == 1) // 需要检测当前奇数位数的数值为奇数
{
if (str[j] % 2 == 1)
{
b++;
continue;
}
else
break;
}
else // 检测当前偶数位的数值是否为偶数
{
if (str[j] % 2 == 0)
b++;
else
break;
}
}
if (j == -1)
cnt++;
}
cout << cnt << endl;
return 0;
}