天梯赛练习

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;
} 

 

posted @ 2020-10-25 21:59  Endeavo_r  阅读(145)  评论(0)    收藏  举报