时间不知不觉中走过了5天,今天是考试。我觉得我这次考得比之前有进步,虽然老师说是题太水了。这次我考了310分是第十九名。第一题是80,第二题是100,第三题是30,第四题是100。
#include<bits/stdc++.h>
using namespace std;
int a[50][51000]={};
int b[50];
int main()
{
freopen("index.in","r",stdin);
freopen("index.out","w",stdout);
int n,m,k,s,l=0,w,p=1;
char c,f;
scanf("%d%d",&n,&m);
for(int i=1;i<=50;i++)
b[i]=1;
for(int i=1;i<=n;i++)
{
scanf(" %c",&f);
w=int(f-'a'+1);
a[w][b[w]]=i;//横坐标为字母的ASCLL码值,纵坐标为该字母的出现次数,该数字为字母在序列中的位置。
b[w]++;
}
for(int i=1;i<=m;i++)
{
scanf(" %c%d%d",&c,&k,&s);
w=int(c-'a'+1);
if(a[w][k]!=s)
l++;
}
if(l==0) printf("AK");
else printf("%d",l);
}
这题输入输出要用scanf和printf用惯了cin,cout都不想用这俩东西。但我20分就丢在了这儿。
第二题:一个人出题要n分钟,一共有x道题可以出,每道题要花a[i]分钟。问最多能出几道题。 这道题的数据只允许一从循环,要用贪心的算法。
#include<bits/stdc++.h>
using namespace std;
long long a[110000];
int main()
{
freopen("zzx.in","r",stdin);
freopen("zzx.out","w",stdout);
int n,m;
long long x=1;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
while(m-a[x]>=0)//用贪心思想,尽量出时间少的题,可以节省时间
{
m-=a[x]; x++;
}
cout<<x-1;
}
第三题:求三个数的最小公倍数。(一大串的题目就这几个字的意思)
#include<bits/stdc++.h>
using namespace std;
int gcd(long long x,long long y)
{
if(y==0)
return x;
return gcd(y,x%y);
}
int main()
{
freopen("running.in","r",stdin);
freopen("running.out","w",stdout);
long long a,b,c,k,l,k1;
cin>>a>>b>>c;
k=gcd(a,b);//求a b的最大公约数
l=(a/k)*b;//a b的最大公倍数
k1=gcd(l,c);//求a,b的最大公倍数和c的最大公约数可求出a,b,c的共同的最小公因数。
l=(l/k1)*c;//a,b,c的最小公倍数
cout<<l;
}
我考三十分的是因为k1=gcd(l,c)这句中a b的最大公倍数改成了求a b的最大公约数。我本来了想法是a b的最大公倍数但一时脑抽变成了a b的最大公约数,而且样例也没查出来。
第四题:1~n!的结果结尾有几个零。这题上课时讲过,因为2一定比5多所以记录一共有多少个5即可
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("zero.in","r",stdin);
freopen("zero.out","w",stdout);
int n,s=0;
cin>>n;
while(n>0)
s+=n/=5;
cout<<s;
}
这程序短到吓人,大概就和刚写程序时的长度差不多。