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