1. 程式人生 > >數據結構(三)

數據結構(三)

當我 結構 memset stdio.h nbsp flag set 問題 編寫程序

問題 C: 數據結構作業01 -- 一元多項式的求積

時間限制: 1 Sec 內存限制: 128 MB
提交: 1711 解決: 293
[提交][狀態][討論版]

題目描述

一個一元多項式可以看作由若幹個一元單項式按降冪排列成的線性表。請編寫程序對輸入的兩個一元多項式求積,並輸出求積的結果。

輸入

輸入為兩個一元多項式,每個一元多項式輸入一行,按照降冪依次輸入每個單項式的系數和指數,並以-1 -1作為結束。 系數和指數均為整數,指數不小於0。

輸出

輸出為求積結果多項式,按照降冪依次輸出每個單項的系數和指數,每個數值後面用一個空格隔開,輸出結果多項式後換行。 系數為0的單項式不得輸出——除非結果多項式就是0,則直接輸出0。

樣例輸入

2 5 1 0 -1 -1
5 4 3 0 -1 -1

樣例輸出

10 9 6 5 5 4 3 0 


#include<stdio.h>  
#include<string.h>  
int a[100000],b[100000],c[100000];  
int main(){  
    int i,j;  
    int an,m,n;  
    m=0;  
    n=0;  
    int max,maxa,maxb;  
    max=0;  
    maxa=0;  
    maxb=0;  
    memset(a,0,sizeof(a));  
    memset(b,
0,sizeof(b)); memset(c,0,sizeof(c)); while(~scanf("%d %d",&n,&m)){ if(m==-1&&n==-1) break; if(maxa<m) maxa=m; a[m]=n; } while(~scanf("%d%d",&n,&m)){ if(m==-1&&n==-1
) break; if(maxb<m) maxb=m; b[m]=n; } max=maxa+maxb; for(i=0;i<=maxa;i++){ for(j=0;j<=maxb;j++){ n=a[i]*b[j]; if(n!=0){ m=i+j; c[m]+=n; } } } int flag=1; for(i=max;i>=0;i--){ if(c[i]!=0){ flag=0; printf("%d %d ",c[i],i); } } if(flag) printf("0"); printf("\n"); return 0; }

第一:memset(a,1,size) 對數組地址 a 開始賦size 個1

第二: 當我們輸入時,其實是輸入的ASCALL碼,範圍為0~255 ,c中將EOF定義為-1,當 scanf()==EOF 就是輸入錯誤了,而 ~ 是位運算,它是將數據在內存中的每一位(當然是二進制)取反。-1在內存中所有位全部為1,~(-1)=0,即對-1取非就是0。

第三:背包法思想,很有用,沒事可以拿出來好好思考。

數據結構(三)