试题A: 握手问题 链接:1.握手问题 - 蓝桥云课
C++代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int aus = 0;
for(int i = 1; i < 50; i++){
for(int j = i + 1; j <= 50; j++){
if(j >= 1 && j <= 7) continue;
aus++;
}
}
cout << aus;
return 0;
}
试题B: 小球反弹 链接:1.小球反弹 - 蓝桥云课
C++代码:
#include <iostream>
#include <cmath>
using namespace std;
//dx*t = 2px, dy*t = 2qy.
//p/q = dx*y / dy*x, p = dx*y, q = dx*y
//t = 2*p*x/dx, s = t*sqrt(dx^2+dy^2)
//求最大公约数
int gid(int a, int b) {
return (b > 0) ? gid(b, a % b) : a;
}
int main() {
int x = 343720, y = 233333, dx = 15, dy = 17;
int p = dx * y, q = dy * x;
//求最大公约数
int num = gid(p, q);
//求来回一趟p和q的最小值
p /= num, q /= num;
//计算时间
double tim = 2 * p * x / dx;
//计算总路程
double sum = tim * sqrt(dx * dx + dy * dy);
printf("%.2lf", sum);
return 0;
}
试题C: 好数 链接:3.好数 - 蓝桥云课
C++代码:
#include <iostream>
using namespace std;
bool gid(int n){
int ans = 1;
while(n > 0){
int b = n % 10;
if(ans % 2 == 1){
if(b % 2 == 0) return false;
}
else{
if(b % 2 == 1) return false;
}
ans++;
n /= 10;
}
return true;
}
int main()
{
// 请在此输入您的代码
int N;
cin >> N;
int aus = 0;
for(int i = 1; i <= N; i++){
//排除个位数里的偶数,不符合的条件
if(i % 10 % 2 == 0) continue;
if(gid(i)) aus++;
}
cout << aus;
return 0;
}
试题D:R 格式 链接:1.R 格式 - 蓝桥云课
C++代码:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
const int N = 3e6 + 10;
int a[N];
int main() {
int n; string s;
cin >> n >> s;
//反转浮点数
reverse(s.begin(), s.end());
//寻找小数点的下标
int pos = s.find('.');
//删除小数点
s.erase(pos, 1);
//将字符转换为数字存入到数组data中
int len = s.size();
for (int i = 0; i < len; i++) {
a[i] = s[i] - '0';
}
//数组data需要乘n次2
for (int i = 0; i < n; i++) {
for (int j = 0; j < len; j++) {
a[j] *= 2;
}
//进位处理
for (int k = 0; k < len; k++) {
if (a[k] >= 10) {
a[k + 1] += a[k] / 10;
a[k] %= 10;
if (a[len] > 0) len++;
}
}
}
//四舍五入
if (a[pos - 1] >= 5) a[pos]++;
//倒序打印
for (int i = len - 1; i >= pos; i--) {
cout << a[i];
}
return 0;
}