1. 程式人生 > >【C語言 翁愷·第7周】

【C語言 翁愷·第7周】

1多項式加法(5分)
題目內容:

一個多項式可以表達為x的各次冪與係數乘積的和,比如:

2x6+3x5+12x3+6x+20

現在,你的程式要讀入兩個多項式,然後輸出這兩個多項式的和,也就是把對應的冪上的係數相加然後輸出。

程式要處理的冪最大為100。

輸入格式:

總共要輸入兩個多項式,每個多項式的輸入格式如下:

每行輸入兩個數字,第一個表示冪次,第二個表示該冪次的係數,所有的係數都是整數。第一行一定是最高冪,最後一行一定是0次冪。

注意第一行和最後一行之間不一定按照冪次降低順序排列;如果某個冪次的係數為0,就不出現在輸入資料中了;0次冪的係數為0時還是會出現在輸入資料中。

輸出格式:

從最高冪開始依次降到0冪,如:

2x6+3x5+12x3-6x+20

注意其中的x是小寫字母x,而且所有的符號之間都沒有空格,如果某個冪的係數為0則不需要有那項。

輸入樣例:

6 2

5 3

3 12

1 6

0 20

6 2

5 3

2 12

1 6

0 20

輸出樣例:

4x6+6x5+12x3+12x2+12x+40

時間限制:500ms記憶體限制:32000kb

#include<stdio.h>
#include<string.h>
#include<math.h>
int a[105];
int main()
{
    memset(a,0,sizeof(a));
    int x,y;
    int count0=0;
    while(scanf("%d %d",&x,&y))
    {
        a[x]+=y;
        if(x==0)
            count0++;
        if(count0==2)
            break;
    }
    int flagcout=0;
    for(int i=100;i>=0;i--)
    {
        if(a[i]!=0)
        {
            if(flagcout)
            {
                if(a[i]>0)
                    printf("+");
                if(a[i]!=1)
                printf("%d",a[i]);
                if(i>=2)
                    printf("x%d",i);
                else if(i==1)
                    printf("x");
                if(a[i]==1&&i==0)
                    printf("%d",a[i]);
            }
            else
            {
                if(a[i]!=1)
                printf("%d",a[i]);
                if(i>=2)
                    printf("x%d",i);
                else if(i==1)
                    printf("x");
                    flagcout=1;
            }
        }
    }
    if(!flagcout)
        printf("0");
    printf("\n");
}

2鞍點(5分)
題目內容:

給定一個n*n矩陣A。矩陣A的鞍點是一個位置(i,j),在該位置上的元素是第i行上的最大數,第j列上的最小數。一個矩陣A也可能沒有鞍點。

你的任務是找出A的鞍點。

輸入格式:

輸入的第1行是一個正整數n, (1<=n<=100),然後有n行,每一行有n個整數,同一行上兩個整數之間有一個或多個空格。

輸出格式:

對輸入的矩陣,如果找到鞍點,就輸出其下標。下標為兩個數字,第一個數字是行號,第二個數字是列號,均從0開始計數。

如果找不到,就輸出

NO

題目所給的資料保證了不會出現多個鞍點。

輸入樣例:

4

1 7 4 1

4 8 3 6

1 6 1 2

0 7 8 9

輸出樣例:

2 1

時間限制:500ms記憶體限制:32000kb

#include<stdio.h>
#include<string.h>
int a[105][105];
int max(int x,int y)
{
    return x>y?x:y;
}
int min(int x,int y)
{
    return x<y?x:y;
}
int main()
{
    int n;
    scanf("%d",&n);
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            scanf("%d",&a[i][j]);
            if(i==1)
                a[0][j]=a[i][j];
            else
                a[0][j]=min(a[0][j],a[i][j]);
            if(j==1)
                a[i][0]=a[i][j];
            else
                a[i][0]=max(a[i][0],a[i][j]);
        }
    }
    int hhh=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i][j]==a[0][j]&&a[i][j]==a[i][0])
            {
                printf("%d %d\n",i-1,j-1,a[i][j]);
                hhh=1;
                break;
            }
        }
    }
    if(!hhh)
    {
        printf("NO\n");
    }
    return 0;
}