复试准备-day7-CCF

1002 A+B for Polynomials

This time, you are supposed to find A+B where A and B are two polynomials.

多项式相加

#include<stdio.h>
int main(){
    int m,n;//分别是两个多项式的项数
    scanf("%d",&m);
    float list1[1000];
    int exp;
    float coe;//分别表示系数和指数
    int count=m;
    for(int i=0;i<1000;i++) list1[i]=0.0;
    while(m>0){
        scanf("%d %f",&exp,&coe);
        list1[exp]+=coe;
        m--;
    }
    scanf("%d",&n);
    while(n>0){
        
        scanf("%d %f",&exp,&coe);
        if(list1[exp]==0) count++;
        list1[exp]+=coe;
        if(list1[exp]==0) count--;
        n--;
    }

    //输出格式
    printf("%d",count);
    for(int i=1000;i>=0;i--){
        if(list1[i]!=0) printf(" %d %.1f",i,list1[i]);
    }
    return 0;
}

注意系数相加后可能消项

1009 Product of Polynomials

This time, you are supposed to find A×B where A and B are two polynomials.

多项式相乘

#include<stdio.h>

int main(){
    int m,n,count=0;
    int exp,x_exp;//指数
    float coe,x_coe;//系数
    float list[2001]={0.0},result[2001]={0.0};//第一行多项式和计算结果
    
    scanf("%d",&m);//第一列多项式
    while(m>0){
        scanf("%d %f",&exp,&coe);
        list[exp]=coe;
        m--;
    }
    
    scanf("%d",&n);//第二列多项式相乘
    while(n>0){
        scanf("%d %f",&exp,&coe);
        for(int i=2000;i>=0;i--){
            if(list[i]!=0.0){
                x_exp=exp+i;
                x_coe=coe*list[i];
                if(result[x_exp]==0.0) count++;//新项+1
                result[x_exp]+=x_coe;
                if(result[x_exp]==0.0) count--;//消除项-1
            }
        }
        n--;
    }

    //输出格式
    printf("%d",count);
    for(int i=2000;i>=0;i--){
        if(result[i]!=0.0) printf(" %d %.1f",i,result[i]);
    }
    return 0;
}
}

注意:初始化
list[2001]={0.0}和result[2001]={0.0}

1004 成绩排名

读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

#include<stdio.h>
#include<string.h>
struct student{
    char name[20];
    char num[20];
    int score;
};
int main(){
    int n;
    int max=0,min=100;
    scanf("%d",&n);
    struct student stu[n];
    for(int i=0;i<n;i++){//记录所有成绩
        scanf("%s %s %d",stu[i].name,stu[i].num,&stu[i].score);
    }
    
    for(int i=0;i<n;i++){//定位最大和最小
        if(stu[i].score>max) max=stu[i].score;
        if(stu[i].score<min) min=stu[i].score;
    }
    
    for(int i=0;i<n;i++){
        if(stu[i].score==max) printf("%s %s\n",stu[i].name,stu[i].num);
    }
    for(int i=0;i<n;i++){
        if(stu[i].score==min) printf("%s %s",stu[i].name,stu[i].num);
    }
    
    return 0;
}

注意最后是先输出最好成绩再输出最差成绩,我直接在for循环中判断是否等于max和min导致有时候会先输出min再是max

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值