天梯赛练习
7-4 出生年 (15分)
只记得不足4位的年份要在前面补零,不同的数字要加一,忘了里面可能本来就有零,后来改了一下
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<string> using namespace std; typedef long long ll; int a[10]; bool compare(int s,int k){ int t,counts=0,temp; temp=s; memset(a,0,sizeof(a)); while(s){ t=s%10; s=s/10; if(a[t]==0){ counts++; } a[t]++; } if(temp<1000&&!a[0]){ counts+=1; } if(counts==k){ return true; } return false; } int main(){ int n; int y,my; cin>>y>>n; for(int i=0;;i++){ my=y+i; if(compare(my,n)){ printf("%d %04d\n",i,my); return 0; } } return 0; }
7-5 敲笨钟 (20分)
忘记在前面加一个getchar()
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<string> using namespace std; typedef long long ll; bool ist(string s){ string r; for(int i=0;i<s.length();i++){ if(s[i]==','||s[i]=='.'){ if(!(s[i-1]=='g'&&s[i-2]=='n'&&s[i-3]=='o')){ return false; } } } return true; } int main(){ int n,cnt=0,flag=0; string s,a; a="qiao ben zhong."; cin>>n; getchar(); while(n--){ getline(cin,s); cnt=0; if(ist(s)){ for(int i=s.length()-1;i>=0;i--){ if(s[i]==' '){ cnt++; } if(cnt==3){ flag=i; break; } } for(int i=0;i<=flag;i++){ cout<<s[i]; } cout<<a<<endl; }else{ cout<<"Skipped"<<endl; continue; } } return 0; }
7-10 抢红包 (25分)
开始计算的时候直接以分的形式计算,后来比较输出有错误;改成以元计算,输出成0.01在变成分,顺序就对了
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<string> using namespace std; typedef long long ll; #define MAX 10010 double money[MAX]; int hongbao[MAX]; struct node{ int num; double s; int rednum; }; bool cmp(node a, node b){ if(a.s==b.s){ if(a.rednum==b.rednum){ return a.num<b.num; } return a.rednum>b.rednum; } return a.s>b.s; } int main(){ node a[MAX]; int N,n,k; double p,sum=0; cin>>N; for(int i=1;i<=N;i++){ cin>>k; sum=0; for(int j=1;j<=k;j++){ cin>>n>>p; hongbao[n]++; money[n]+=p; sum+=p; } money[i]-=sum; } for(int i=1;i<=N;i++){ a[i].num=i; a[i].s=money[i]; a[i].rednum=hongbao[i]; } sort(a+1,a+1+N,cmp); for(int i=1;i<=N;i++){ printf("%d %.2f\n",a[i].num,a[i].s*0.01); } return 0; }
7-11 互评成绩
一开始的输出方式测试点3过不了,改了一下输出方式就过了,应该漏了某个点
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<string> using namespace std; typedef long long ll; #define MAX 10010 double s[MAX]; int main(){ int n,k,m; double x,maxx=-1,minn=100; double sum=0; cin>>n>>k>>m; for(int i=0;i<n;i++){ sum=0,maxx=-1,minn=101; for(int j=0;j<k;j++){ cin>>x; sum+=x; maxx=max(maxx,x); minn=min(minn,x); } s[i]=(sum-maxx-minn)*1.000/(k-2); } sort(s,s+n); for(int i=n-m;i<n-1;i++){ printf("%0.3f ",s[i]); } printf("%0.3f\n",s[n-1]); return 0; }

浙公网安备 33010602011771号