【PAT随笔】——多项式加法

 

 

 

代码实现:

  1 #include <stdio.h>
  2   // 项 的结构体
  3 struct Item{
  4     int pwoer;
  5     int coefficient;
  6 }a[100]={0,0},b[100]={0,0},c[100]={0,0};
  7 //找出最大值序号
  8 int Max(struct Item _array[],int index){
  9     int maxid=0;
 10 
 11     for(int i=1;i<index+1;i++){
 12         if(_array[maxid].pwoer<_array[i].pwoer){
 13             maxid=i;
 14         };
 15     };
 16 
 17     return maxid;
 18 }
 19 
 20 int main(int argc, char **argv) {
 21 
 22     int len_a=sizeof(a)/sizeof(a[0]);
 23     int len_b=sizeof(b)/sizeof(b[0]);
 24     int index_a,index_b,index_c;
 25     //数据导入 a[]
 26     for(int i=0;i<len_a;i++){
 27         scanf("%d %d",&a[i].pwoer,&a[i].coefficient);
 28         if(a[i].coefficient==0){
 29             a[i].pwoer=0;
 30             a[i].coefficient==0;
 31             i--;
 32             continue;
 33         };
 34         if(a[i].pwoer==0){
 35             a[i+1]=a[i];
 36             a[i]=a[0];
 37             a[0]=a[i+1];
 38             index_a=i;
 39             break;
 40         };
 41     };
 42    //数据导入 b[]
 43     for(int i=0;i<len_b;i++){
 44         scanf("%d %d",&b[i].pwoer,&b[i].coefficient);
 45         if(b[i].coefficient==0){
 46             b[i].pwoer=0;
 47             b[i].coefficient==0;
 48             i--;
 49             continue;
 50         };
 51         if(b[i].pwoer==0){
 52             b[i+1]=b[i];
 53             b[i]=b[0];
 54             b[0]=b[i+1];
 55             index_b=i;
 56             break;
 57         };
 58     };
 59     //将输入的数值进行升序排序
 60     for(int i=index_a;i>-1;i--){
 61         int maxid=Max(a,i);
 62         a[index_a+1]=a[i];
 63         a[i]=a[maxid];
 64         a[maxid]=a[index_a+1];
 65     };
 66     //合并数组中相同系数的项
 67 
 68         for(int i=0;i<index_a;i++){
 69             if(a[i].pwoer==-1){
 70                 continue;
 71             };
 72             for(int j=i+1;j<index_a;j++){
 73                 if(a[i].pwoer==a[j].pwoer){
 74                     a[i].coefficient+=a[j].coefficient;
 75                     a[j].pwoer=-1;
 76                 };
 77             };
 78         };
 79         for(int i=1;i<=index_a;i++){
 80             while(a[i].pwoer==-1){
 81                 a[i]=a[i+1];
 82             };
 83             if(a[i].coefficient==0){
 84                 index_a=i-1;
 85                 break;
 86             };
 87         };
 88 
 89     for(int i=index_b;i>-1;i--){
 90         int maxid=Max(b,i);
 91         b[index_b+1]=b[i];
 92         b[i]=b[maxid];
 93         b[maxid]=b[index_b+1];
 94     };
 95     //合并数组中相同系数的项
 96     {
 97         for(int i=0;i<index_b;i++){
 98             if(b[i].pwoer==-1){
 99                 continue;
100             };
101             for(int j=i+1;j<index_b;j++){
102                 if(b[i].pwoer==b[j].pwoer){
103                     b[i].coefficient+=b[j].coefficient;
104                     b[j].pwoer=-1;
105                 };
106             };
107         };
108         for(int i=1;i<=index_b;i++){
109             while(a[i].pwoer==-1){
110                 b[i]=b[i+1];
111             };
112             if(b[i].coefficient==0){
113                 index_b=i-1;
114                 break;
115             };
116         };
117     }
118 
119     //将a[] b[]合并到C[](无序)同项合并
120     {
121         for(int i=0;i<=index_a;i++){
122 
123             c[i]=a[i];
124             for(int j=0;j<=index_b;j++){
125                 if(b[i].pwoer==-1){
126                     continue;
127                 };
128                 while(a[i].pwoer==b[j].pwoer){
129                     c[i].pwoer=a[i].pwoer;
130                     c[i].coefficient+=b[j].coefficient;
131                     b[j].pwoer=-1;
132                 };
133             };
134         };
135         index_c=index_a;
136         for(int i=0;i<=index_b;i++){
137             if(b[i].pwoer!=-1){
138                 index_c+=1;
139                 c[index_c]=b[i];
140             };
141         };
142     }
143 
144     //将c[]升序排列
145     for(int i=index_c;i>-1;i--){
146         int maxid=Max(c,i);
147         c[index_c+1]=c[i];
148         c[i]=c[maxid];
149         c[maxid]=c[index_c+1];
150     };
151 
152     for(int i=index_c;i>-1;i--){
153         if(i>0){
154             if(c[i].pwoer==1){
155                 printf("%dx + ",c[i].coefficient);
156             }
157             else{
158                 printf("%dx^%d + ",c[i].coefficient,c[i].pwoer);
159             };
160             
161         }else{
162             printf("%d",c[i].coefficient);
163         };
164     };
165 
166     printf("\n");
167 
168     return 0;
169 }

 

posted on 2021-11-18 10:17  撞破南墙不回头  阅读(44)  评论(0)    收藏  举报

导航