zhedapat1002
来源:互联网 发布:sql加用户名和密码 编辑:程序博客网 时间:2024/05/21 08:33
自身水平低写不出来,没把题读清 ,搞清楚各个变量的取值范围 , 但是自己写的代码可以通过他的例子, 思想就是两个集合的并集 ,就是不太明白为什么编译不过去完全过不了
#include<iostream>#include<iomanip>using namespace std;//typedef struct P{int K;//1,2,3,..,10int e[10];//1~1000float a[10];}P;int main(){P A, B;P sum;int i, j, k;if (cin >> A.K){for (i = 0; i < A.K; i++)cin >> A.e[i] >> A.a[i];}if (cin >> B.K){for ( i = 0; i < B.K; i++)cin >> B.e[i] >> B.a[i];}i = j = k = 0;while (i < A.K || j < B.K){if (A.e[i] > B.e[j]){sum.e[k] = A.e[i];sum.a[k] = A.a[i];i++; k++;}else if (A.e[i] < B.e[j]){sum.e[k] = B.e[j];sum.a[k] = B.a[k];j++; k++;}else{sum.e[k] = A.e[i];sum.a[k] = A.a[i] + B.a[j];j++; i++; k++;}}sum.K = k;cout << endl;cout << k<<" ";for (i = 0; i < k; i++){cout << sum.e[i] << " " << setiosflags(ios::fixed) << setprecision(1) << sum.a[i] << " ";}while (1);return 0;}
然后百度了一下 看了看他们的代码 其中一个 链接:点击打开链接http://blog.csdn.net/coraline_m/article/details/28595449
为了方便,他们的代码我也贴上 没得到博主许可 我就先注明一下了。
代码如下:
#include<cstring> #include<iostream> #include<cstdio> #include<cmath> using namespace std; const int maxn=2000005; double a[maxn]; int main() { int k,i,p; double x; while(cin>>k) { memset(a,0,sizeof(a)); for(i=0;i<k;i++) { cin>>p>>x; a[p]+=x; } cin>>k; for(i=0;i<k;i++) { cin>>p>>x; a[p]+=x; } int sum=0; for(i=0;i<=maxn-1;i++) { if(fabs(a[i])>=0.1) sum++; } cout<<sum; for(i=maxn-1;i>=0;i--) { if(fabs(a[i])>=0.1) printf(" %d %.1f",i,a[i]); } cout<<endl; } return 0; } /* 2 1 2.4 0 3.2 2 2 1.5 1 0.5 2 1 -2.4 0 -3.2 2 2 -1.5 1 -0.5 2 1 -2.4 0 0.5 2 2 -1.5 1 2.4 */仔细琢磨了一下,他的思路就是直接申请一个很大的空间无论有多少多项式都在这个主式上操作,无非就是加加减减的操作,之前没见过,感觉很新颖。但是需要很多内存,把maxn改成1008也是可以的。
第二个跟这个差不多 链接:点击打开链接
http://blog.csdn.net/sup_heaven/article/details/8451651
#include<stdio.h> #include<math.h> int main(){ int i,n,m,Ni,cnt=0,mark[1008]; double ni,sum[1008]; for(i=0;i<1008;i++){ sum[i]=0; mark[i]=0; } scanf("%d",&n); for(i=0;i<n;i++){ scanf(" %d %lf",&Ni,&ni); sum[Ni]=sum[Ni]+ni; if(mark[Ni]==0){ mark[Ni]=1; cnt++; } } scanf("%d",&m); for(i=0;i<m;i++){ scanf(" %d %lf",&Ni,&ni); sum[Ni]=sum[Ni]+ni; if(mark[Ni]==0){ mark[Ni]=1; cnt++; } } for(i=1000;i>=0;i--){ if(mark[i]==1&&fabs(sum[i])<0.00001){ cnt--; mark[i]=0; } } printf("%d",cnt); for(i=1000;i>=0;i--){ if(mark[i]==1){ cnt--; if(cnt==0) printf(" %d %.1lf\n",i,sum[i]); else printf(" %d %.1lf",i,sum[i]); } } return 0; }相同的思路也是在一根主式上操作 这里就说下第四个for是用来将输入的两个多项式中同指数,但系数和为0的项标记去掉,所以计数会减一。最后感谢大佬的代码指点。
0 0
- zhedapat1002
- POJ 3157 Java vs C++ 可能会
- Java Fundamental day06
- python 读取并显示图片的两种方法
- 使用 Apache Commons CLI 开发命令行工具示例
- 230. Kth Smallest Element in a BST
- zhedapat1002
- RCNN系列学习笔记(6):SSD: Single Shot MultiBox Detector
- MongoDB —— Windows环境安装与简单使用
- 剑指offer 字符串的排列
- eclipse 用ctrl+左键去查看一个变量的声明之后,有没有快捷键返回之前点的那个位置
- Win10开发笔记11
- 自己动手搭建苹果推送Push服务器
- Tempter of the Bone
- spring MVC 乱码、restful