2011年8月4日 星期四

[ACM 392] Polynomial Showdown

 內容 :
給你一個數學多項式的係數,從8次方到0次方。你的任務是把一些不需要的項次拿掉,然後以易讀的格式來輸出。例如:給你 0, 0, 0, 1, 22, -333, 0, 1,  -1這9個係數,你應該要產生這樣的輸出: x^5 + 22x^4 - 333x^3 + x - 1
以下是詳細格式的規則:
  1. 項次必須按降冪出現。
  2. 指數部分出現在^符號之後。
  3. 常數項只要出現常數部分就好了,不需有x^0。
  4. 只有係數非0的項次才需出現。如果所有的係數都是0,那只要輸出常數項就可以了。
  5. 介於項次之間的+號和-號兩邊各有一空白字元。
  6. 假如第一項的係數是正的,那麼該係數不需要符號。如果第一項的係數是負的,那該係數必須有-這個符號。例如:-7x^2 + 30x + 66
  7. 若係數為負,則以減一個正數來表示(除了上面第6條所提到的第一項之外),而非以加一個負數來表示。例如:x^2 + -3x 這樣的表示法是錯誤的,應該是:x^2 - 3x才對。
  8. 1或-1,除了常數項之外都不應該出現。例如:-1x^3 + 1x^2 + 3x^1 - 1 這樣的表示法是錯誤的,應該是:-x^3 + x^2 + 3x - 1 才對。

 輸入說明 :
每組測試資料一列,含有9個整數(絕對值都小於1000)。
輸出說明 :
對每一組測試資料,按照上面的規則輸出多項式。請參考Sample Output。
範例輸入 :
0 0 0 1 22 -333 0 1 -1
0 0 0 0 0 0 -55 5 0

範例輸出 :
x^5 + 22x^4 - 333x^3 + x - 1
-55x^2 + 5x



/**********************************************************************************/
/*  Problem: c060 "Polynomial Showdown" from ACM 392                              */
/*  Language: C                                                                   */
/*  Result: AC (20ms, 372KB) on ZeroJudge                                         */
/*  Author: diiuuli520 at 2008-08-20 18:07:20                                     */
/**********************************************************************************/
#include<stdio.h>
#include<stdlib.h>
int main(void)
    int a[9000],b,i; 
    while(scanf("%d",&a[0])!=EOF){
        for(i=1;i<9;i++)
            scanf("%d",&a[i]); 
        b=0; 
        for(i=0;i<7;i++){
           if(b==0){ 
             if (a[i]>1){ 
               printf("%dx^%d",a[i],8-i);
               b=1;                      } 
             else if(a[i]<-1){ 
               printf("%dx^%d",a[i],8-i);
               b=1;                      }
             else if(a[i]==1){ 
               printf("x^%d",8-i);
               b=1;}
             else if(a[i]==-1){ 
               printf("-x^%d",8-i);
               b=1;}  }
           else{
             if (a[i]>1) 
               printf(" + %dx^%d",a[i],8-i);
             else if(a[i]<-1){ 
               a[i]*=-1;
               printf(" - %dx^%d",a[i],8-i);
                      }
             else if(a[i]==1) 
               printf(" + x^%d",8-i);
             else if(a[i]==-1) 
               printf(" - x^%d",8-i);
                 } } 
        if(b==0){
          if(a[7]>1){ 
             printf("%dx",a[7]);
             b=1; } 
          else if(a[7]<-1){
             printf("%dx",a[7]);
             b=1; } 
          else if(a[7]==1){ 
             printf("x");
             b=1;}
          else if(a[7]==-1){ 
             printf("-x");
             b=1;}} 
        else{
          if(a[7]>1)
             printf(" + %dx",a[7]);
          else if(a[7]<-1){
             a[i]*=-1;
             printf(" - %dx",a[7]);} 
          else if(a[7]==1) 
             printf(" + x");
          else if(a[7]==-1)
             printf(" - x");} 
        if(b==0){ 
        if(a[8]>1)
          printf("%d",a[8]);
        else if(a[8]<-1){ 
          printf("%d",a[8]);}
        else if(a[8]==1) 
             printf("1");
        else if(a[8]==-1) 
          printf("-1");
        else 
          printf("0"); 
          }
        else{ 
        if(a[8]>1)
          printf(" + %d",a[8]);
        else if(a[8]<-1){
          a[8]*=-1;
          printf(" - %d",a[8]);}
        else if(a[8]==1) 
             printf(" + 1");
        else if(a[8]==-1) 
          printf(" - 1"); 
          }  
        printf("\n"); 
    } 
    return(0); 
}

沒有留言:

張貼留言