A
题目描述
给出一个正整数 n,请你计算从 1 到 n 的所有正整数中,有多少个数字的各位数和是 9?
输入格式
输入一个不超过 1000000的正整数 nn。
输出格式
输出一个整数表示答案
输入输出样例
输入
50
输出
5
说明/提示
1 到 50 的所有整数中,有 9,18,27,36,45 这 5 个数字符合要求。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int count = 0;
do{
int sum = 0;
int i = n;
while(i){
int k = i % 10;
i /= 10;
sum += k;
}
if(sum == 9) count++;
}while(n--);
printf("%d\n",count);
return 0;
}
B
题目描述
一个直角三角形的两个直角边是 a,b(a≤b),其斜边是 c,且 a,b,c都是正整数。
现在我们已经知道了斜边长度 c,请问这个直角三角形的两个直角边的长度是什么?
输入格式
输入一个整数 c(1<=c <=1.41*104)。
输出格式
输出两个整数 a,b表示答案。保证有整数解。如果有多个可能的答案,请确保 aa 尽可能的小。
输入输出样例
输入 #1复制
5
输出 #1复制
3 4
题目链接
#include <bits/stdc++.h>
using namespace std;
int main(){
int a,b,c;
scanf("%d",&c);
for(b = c; b >=1;b-- ){
for(a = 1;a <= b;a++){
if(a * a + b * b == c*c) {
printf("%d %d\n",a,b);
return 0;
}else if(a * a + b * b > c * c){
break;
}else continue;
}
}
return 0;
}
C
题目描述
我们知道计算机的大小单位有 B, KB, MB 等,现在请你编写一个计算器进行大小单位换算。
提示,1 GB = 210MB=220KB = 230B。
输入格式
输入一个字符串,由一个 0 到 1023 之间的整数,一个单位名称(大写字母),一个等于号和问号,以及第二个单位名称。
单位只有可能是 GB,MB,KB,B 之间的一个。
输出格式
输出一个数字,精确到小数点后 6 位。
输入输出样例
输入 #1复制
128MB=?GB
输出 #1复制
0.125000
输入 #2复制
64MB=?KB
输出 #2复制
65536.000000
题目链接
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
char R,C;
double a = 0;
bool falg1 = true,falg2 = false;
for(int i = 0;i < s.length();i++){
if(falg1){
if(s[i] == 'B') {
falg1 = false;
falg2 = true;
}
if(s[i] <='9' && s[i] >= '0'){
a *= 10;
a += s[i] - '0';
}
}
if(falg2){
if(s[i-1] <='9' && s[i-1] >= '0') R = 'B';
else R = s[i-1];
falg2 = false;
}
if(s[i] == '?'){
C= s[i+1];
break;
}
}
if(R == 'G'){
if(C == 'G'){
printf("%.6lf\n",a);
}else if(C == 'M'){
printf("%.6lf\n",a*(pow(2,10)));
}else if(C == 'K'){
printf("%.6lf\n",a*(pow(2,20)));
}else if(C == 'B'){
printf("%.6lf\n",a*(pow(2,30)));
}
}else if(R == 'M'){
if(C == 'G'){
printf("%.6lf\n",a*(pow(2,-10)));
}else if(C == 'M'){
printf("%.6lf\n",a);
}else if(C == 'K'){
printf("%.6lf\n",a*(pow(2,10)));
}else if(C == 'B'){
printf("%.6lf\n",a*(pow(2,20)));
}
}else if(R == 'K'){
if(C == 'G'){
printf("%.6lf\n",a*(pow(2,-20)));
}else if(C == 'M'){
printf("%.6lf\n",a*(pow(2,-10)));
}else if(C == 'K'){
printf("%.6lf\n",a);
}else if(C == 'B'){
printf("%.6lf\n",a*(pow(2,10)));
}
}else if(R == 'B'){
if(C == 'G'){
printf("%.6lf\n",a*(pow(2,-30)));
}else if(C == 'M'){
printf("%.6lf\n",a*(pow(2,-20)));
}else if(C == 'K'){
printf("%.6lf\n",a*(pow(2,-10)));
}else if(C == 'B'){
printf("%.6lf\n",a);
}
}
return 0;
}
D
题目描述
小 A 参加一个综艺节目。一共有 n(3<= n <106)名评委参与打分(分数范围是 0 到 100 的整数),每个评委依次亮出自己的得分。
为了节目效果,要求从第三个评委开始,每当第 i 个评委给出打分后,立刻计算出出这个选手在前 i 名评委的打分中,去掉一个最高分和一个最低分,剩下 i-1 个评委的平均分,保留 2 位小数。
输入格式
第一行输入一个整数 n,表示评委人数。
第二行输出 n 个整数,表示各个评委的打分。
输出格式
输出共 n-2 行,每行表示对应的答案。
输入输出样例
输入
6
11 45 14 19 19 81
输出
14.00
16.50
17.33
24.25
题目链接
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
double count = 0.0;
double ave,sum = 0;
int max = -1,min = 101;
for(int i = 0;i < n;i++){
int k;
bool flag1 = false,flag2 = false;
int premax,premin;
scanf("%d",&k);
if(k < min) {
premin = min;
min = k;
flag1 = true;
}
if(k > max) {
premax = max;
max = k;
flag2 = true;
}
if(i == 0 || i == 1) {
sum +=k;
continue;
}
count++;
if(i == 2) {
sum += k;
sum -= (max + min);
ave = sum;
printf("%.2lf\n",ave);
continue;
}
if(flag1) sum += premin;
else if(flag2) sum += premax;
else sum += k;
ave = sum/count;
printf("%.2lf\n",ave);
}
return 0;
}
E
题目描述
在 1582 年之前,以 4 为倍数的年份为闰年。正常情况下,一年中一月到十二月的天数分别是 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 天。如果这年是闰年,那么二月则有 29 天。
但某位皇帝发现这么做其实不够准确,会造成误差,因此规定从 1582 年开始,以 4 为倍数的年份,除了以 100 为倍数且不为 400 的倍数年份,才是闰年。同时为了消除误差,规定 1582 年 10 月 4 日的下一天是 1582 年 10 月 15 日,中间的日期就当作不存在了。
现在给出日期,计算这个日期到公元 1 年 1 月 1 日经过的天数。
输入格式
按照 日月年 的格式输入数据,其中日是 1 到 31 之间的整数,月是三个大写字母,年是 1 到 9999 之间的整数。保证这个日期是合法且存在的。
月份的大写字母:
1月:JAN
2月:FEB
3月:MAR
4月:APR
5月:MAY
6月:JUN
7月:JUL
8月:AUG
9月:SEP
10月:OCT
11月:NOV
12月:DEC
输出格式
输出一个整数表示答案
输入输出样例
输入
1JAN1
输出
0
输入
4OCT1582
输出
577736
输入
15OCT1582
输出
577737
输入
21NOV2020
输出
737751
题目链接