PAT 1002
来源:互联网 发布:php单例模式的特点 编辑:程序博客网 时间:2024/05/14 16:04
1002. A+B for Polynomials(多项式)
计算两个多项式的和,polynomials:K N1 aN1 N2 aN2 ... NK aNK,k为项数,其中指数(exponents)NK,0 <= NK < ... < N2 < N1 <=1000,系数(coefficients) aNi,i=1, 2, ..., K。
Sample Input
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output
3 2 1.5 1 2.9 0 3.2
注意点:
这一题应注意输出的格式:Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.(在每一行的结尾没有多余的空格,系数精确到1位小数(%.1f))。
这一题应注意输出的格式:Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.(在每一行的结尾没有多余的空格,系数精确到1位小数(%.1f))。
也应该注意输出按指数从大到小,特别的是系数为0时,不输出。
主要算法:
c++标准头文件中的qsort函数,
原型:base num width compare
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *, const void *) );
目标数组的开头。
元素的数组大小。
以字节为单位的元素大小。
给比较两个数组的元素并返回值指定这些关系的一个用户提供的实例的指针。
qsort可以实现多种数据类型的快速排序,包括结构体(一级排序,二级排序),用法详见c++.qsort.#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define N 100005struct pol//多项式{ int z;//指数 double x;//系数 int c;//若重复则c=1,否则c=0;};pol pol1[N];pol pol2[N];pol pol3[N];int cmp(const void*a,const void*b)//使用qsort()对结构体进行一级排序,排序方法:升序{return (*(pol*)a).z<(*(pol*)b).z?1:-1;}int main(){ int k1,k2; int i,j;// cin>>k1; for(i=0;i<k1;i++) cin>>pol1[i].z>>pol1[i].x; cin>>k2; for(i=0;i<k2;i++) cin>>pol2[i].z>>pol2[i].x;for(i=0;i<k2;i++)//置零pol2[i].c=0; for(i=0;i<k1;i++) { for(j=0;j<k2;j++) { if(pol1[i].z==pol2[j].z) { pol1[i].x+=pol2[j].x; pol2[j].c=1; } } } for(i=0;i<k2;i++) { if(pol2[i].c==0) { pol1[k1].x=pol2[i].x; pol1[k1].z=pol2[i].z; k1++; } } qsort(pol1,k1,sizeof(pol1[0]),cmp); j=0;//初始化计数器 //for(i=0;i<k1;i++) //cout<<pol1[i].z<<" "<<pol1[i].x<<" "; for(i=0;i<k1;i++)//排除系数为0的项 { if(pol1[i].x!=0) pol3[j++]=pol1[i]; } cout<<j; for(i=0;i<j;i++) { cout<<" "; printf("%d %.1lf",pol3[i].z,pol3[i].x);//此处有占位符!! } return 0;}
下面分享一下高手的c代码:(转载:wq611403)
#include<stdio.h>#include<string.h>double polyRs[1001];int main(){ int k, nk,maxIndex; double ank; int count = 0; int i; memset(polyRs,0,sizeof(int)); scanf("%d", &k); maxIndex=0; while(k--){ scanf("%d%lf",&nk, &ank); polyRs[nk] += ank; if(nk>maxIndex) maxIndex = nk; } scanf("%d", &k); while(k--){ scanf("%d%lf",&nk, &ank); polyRs[nk] += ank; if(nk>maxIndex) maxIndex = nk; } for (i=maxIndex;i>=0;i--) if (polyRs[i] != 0 ) count++; printf("%d", count); for(i = maxIndex; i >=0; i--){ if(polyRs[i] !=0){ printf(" %d %.1lf", i, polyRs[i]); } } return 0;}
0 0
- pat 1002
- PAT 1002
- Pat 1002
- PAT 1002
- PAT 1002
- PAT 1002
- Pat 1002
- PAT 1002
- PAT-1002
- PAT 1002
- PAT 1002
- PAT 1002
- PAT-1002
- PAT 1002
- pat 1002
- PAT Basic 1002
- pat:1002(Advanced)
- PAT Basic practice 1002
- 关于MVC中Html.DropDownList生成的html代码
- Ext基础
- VMWARE下安装MS-DOS7.10
- Raphael学习之绘制静态饼状图(三)
- hdu 2102 A计划(bfs)
- PAT 1002
- 六款值得推荐的Android开源框架简介
- python两个 list 获取交集,并集,差集的方法.
- 使用httpclient全书json数据并解决中文乱码问题
- Macd交易回测Demo及其GUI制作[by fantuanxiaot]
- 冒泡排序
- app支付_微信支付
- Linux开机自动挂载存储
- 耳机插入上层处理流程分析