纪念第一次AK~~
不过也只能在这种级别的简单题做完了(菜是原罪)
1各数字之和
题目描述
给出一个正整数 nn,请你计算从 11 到 nn 的所有正整数中,有多少个数字的各位数和是 99?
输入格式
输入一个不超过 10000001000000 的正整数 nn。
输出格式
输出一个整数表示答案
输入输出样例
输入 #1复制
50
输出 #1复制
5
说明/提示
11 到 5050 的所有整数中,有 9,18,27,36,459,18,27,36,45 这 55 个数字符合要求。
暴力出奇迹
#include<iostream>
using namespace std;
int weishu(int x)
{
int sum=0,temp;
while(x)
{ //记得加剪枝 不然可能会超时
if(sum>9) return 0;
temp=x%10;
sum+=temp;
x/=10;
}
if(sum==9)
return 1;
else return 0;
}
int main()
{ int n;
cin>>n;
int ans=0;
for(int i=9;i<=n;i++)
{
ans+=weishu(i);
}
cout<<ans<<endl;
return 0;
}
2直角三角形
题目描述
给出一个正整数 nn,请你计算从 11 到 nn 的所有正整数中,有多少个数字的各位数和是 99?
输入格式
输入一个不超过 10000001000000 的正整数 nn。
输出格式
输出一个整数表示答案
输入输出样例
输入 #1复制
50
输出 #1复制
5
说明/提示
11 到 5050 的所有整数中,有 9,18,27,36,459,18,27,36,45 这 55 个数字符合要求。
暴力出奇迹 数字乘积可能会过大 开int 会WA,开long long 保险
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long a,b,c,n;
cin>>c;
for(a=1;a<c;a++)
{
for(b=a;b<c;b++)
{
if(a*a + b*b == c*c )
{
cout<<a<<" "<<b<<endl;
return 0;
}
}
}
return 0;
}
3单位转换
题目描述
我们知道计算机的大小单位有 B, KB, MB 等,现在请你编写一个计算器进行大小单位换算。
提示,11 GB = 2^{10}2
10
MB = 2^{20}2
20
KB = 2^{30}2
30
B。
输入格式
输入一个字符串,由一个 0 到 1023 之间的整数,一个单位名称(大写字母),一个等于号和问号,以及第二个单位名称。
单位只有可能是 GB,MB,KB,B 之间的一个。
输出格式
输出一个数字,精确到小数点后 6 位。
输入输出样例
输入 #1复制
128MB=?GB
输出 #1复制
0.125000
输入 #2复制
64MB=?KB
输出 #2复制
65536.000000
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
string s;
double input,ouput; //可以看做是输入了一串数字+一串字符串来处理
cin>>input>>s;
int len=s.size();
//记录差值 输入的级别 输出的级别
int delta,input_l,ouput_l;
if(s[0]=='G') input_l=4;
else if(s[0]=='M') input_l=3;
else if(s[0]=='K') input_l=2;
else input_l=1;
if(s[len-2]=='G') ouput_l=4;
else if(s[len-2]=='M') ouput_l=3;
else if (s[len-2]=='K') ouput_l=2;
else ouput_l=1;
// cout<<input_l<<" "<<ouput_l<<endl;
//找到输入和输出之间的等级差 就好办了
delta=input_l-ouput_l;
ouput= input* pow(1024,delta); //1024的delta次方
printf("%.6lf",ouput);
return 0;
}
4评委打分
题目描述
小 A 参加一个综艺节目。一共有 n(3 \le n \le 10^6)n(3≤n≤10
6
) 名评委参与打分(分数范围是 0 到 100 的整数),每个评委依次亮出自己的得分。
为了节目效果,要求从第三个评委开始,每当第 ii 个评委给出打分后,立刻计算出出这个选手在前 ii 名评委的打分中,去掉一个最高分和一个最低分,剩下 i-1i−1 个评委的平均分,保留 22 位小数。
输入格式
第一行输入一个整数 nn,表示评委人数。
第二行输出 nn 个整数,表示各个评委的打分。
输出格式
输出共 n-2n−2 行,每行表示对应的答案。
输入输出样例
输入 #1复制
6
11 45 14 19 19 81
输出 #1复制
14.00
16.50
17.33
24.25
随着输入记录最大值最小值就行
#include<iostream>
#include<algorithm>
using namespace std;
int num[1000005];
int main()
{
long long sum=0;
int n,maxv=-1,minv=105;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&num[i]);
sum+=num[i];
maxv=max(maxv,num[i]);
minv=min(minv,num[i]);
if(i>=2)
{
double avg=(sum-minv-maxv)/((i-1)*1.0);
printf("%.2lf\n",avg);
}
}
// printf("%d",n);
return 0;
}
5 儒略历
题目描述
在 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
输出格式
输出一个整数表示答案
输入输出样例
输入 #1复制
1JAN1
输出 #1复制
0
输入 #2复制
4OCT1582
输出 #2复制
577736
输入 #3复制
15OCT1582
输出 #3复制
577737
输入 #4复制
21NOV2020
输出 #4复制
737751
这道题注意细节就好
#include<iostream>
using namespace std;
int change_year(string y) //字符串转数字函数
{ int ans=0;
int len=y.size();
for(int i=0;i<len;i++)
{
ans=ans*10 + int(y[i]-'0');
}
return ans;
}
bool reap(int y) //判断是否为闰年
{
return ((y%4== 0 && y%100!=0 )|| y%400==0);
}
int main()
{ string mouth="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";
long long ans=0;
int d;
string s;
cin>>d>>s;
int len=s.size();
string y=s.substr(3,len-3);
string m=s.substr(0,3);
// cout<<m.size()<<m<<endl;
int day,mou,year; //日月年
day=d;
//上面为字符串输入处理:
mou=mouth.find(m)/3+1;
year=change_year(y);
// cout<<year <<mou<<day<<endl;
for(int i=1;i<=year;i++)
{
if(i<1582)
{
for(int j=1;j<=12;j++)
{
int days;
if(j==1 || j== 3 || j == 5 || j==7 || j== 8 || j== 10 || j==12)
{
days=31;
}
else if( j== 4 || j==6 || j== 9 || j== 11)
days=30;
else if(j==2 && i%4 == 0)
{
days =29;
// cout<<"闰年"<<endl;
}
else if(j==2 && i%4 != 0) {
days=28;
//cout<<"不是闰年"<<endl;
}
for(int k=1;k<=days;k++)
{
if(i == year&& j == mou && k==day)
{
cout<<ans<<endl;
return 0;
}
ans++;
}
}
}
else
{
for(int j=1;j<=12;j++)
{ int days;
if(j==1 || j== 3 || j == 5 || j==7 || j== 8 || j== 10 || j==12)
{
days=31;
}
else if( j== 4 || j==6 || j== 9 || j== 11)
days=30;
else if(j==2 && reap(i)) days =29;
else if(j==2 && !reap(i)) days=28;
for(int k=1;k<=days ; k++)
{
if(i == year&& j == mou && k==day)
{
cout<<ans<<endl;
return 0;
}
ans++;
if(i == 1582 && j== 10 && k==4) k+=10;
}
}
}
}
return 0;
}