程序设计入门——C语言(六)

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 <math.h>
 
int main(int argc, const char * argv[]) {
    // insert code here...
    // TODO Auto-generated method stub
    int a,b;
     
    int number[101]={0};
    for(int i=0;i<2;i++)
    {
    do
    {
        scanf("%d %d",&a,&b);
        number[a]+=b;
    }while(a);
    }
        int c=1;
    for(int i=101-1;i>=2;i--)
    {
        if(c)
        {
            if(number[i]==1||number[i]==-1)
            {
                printf("x%d",i);
                c=0;
            }
            else if(number[i]!=0)
            {
                printf("%dx%d",number[i],i);
                c=0;
            }
        }else
        {
            if(number[i]==1)
            {
                printf("+x%d",i);
                 
            }else if(number[i]==-1)
            {
                printf("x%d",i);
                 
            }
             
            else if(number[i]>0)
            {
                
               printf("+%dx%d",number[i],i);
            }else if(number[i]<0)
            {
                printf("%dx%d",number[i],i);
            }
             
        }
             
         
    }
    if(c)
    {
        if(number[1]==1||number[1]==-1)
        {
            printf("x");
            c=0;
        }else if(number[1]!=0)
        {
            printf("%dx",number[1]);
            c=0;
        }
     
        if(number[0]!=0)
        {
            printf("%d",number[0]);
            c=0;
        }
    }else
    {
        if(number[1]==1)
        {
             
             printf("+x");
        }else if(number[1]==-1)
        {
             
            printf("x");
        }
        else if(number[1]>0)
        {
           printf("+%dx",number[1]);
             
        } else if(number[1]<0)
        {
            printf("%dx",number[1]);
             
        }
         
        if(number[0]>0)
        {
            printf("+%d",number[0]);
             
        }else if(number[0]<0)
        {
            printf("%d",number[0]);
             
        }
 
    }
     
    if(c){
        printf("0");
    }
    printf("\n");
    return 0;
}


2 鞍点(5分)



题目内容:

给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。

你的任务是找出A的鞍点。




输入格式:

输入的第1行是一个正整数n, (1<=n<=100),然后有n行,每一行有n个整数,同一行上两个整数之间有一个或多个空格。


输出格式:

对输入的矩阵,如果找到鞍点,就输出其下标。下标为两个数字,第一个数字是行号,第二个数字是列号,均从0开始计数。

如果找不到,就输出

NO

题目所给的数据保证了不会出现多个鞍点。


输入样例:

1 7 4 1 

4 8 3 6 

1 6 1 2 

0 7 8 9


输出样例:

2 1

时间限制:500ms内存限制:32000kb

#include <stdio.h>  
  
int main(){  
    //读入一个数字,决定这个方形矩阵是几阶的  
    int n;  
    scanf("%d",&n);  
  
    //定义n阶矩阵以及将要用到的变量  
    int matrix[n][n];  
    int i,j,temp,count,flag=0;  
  
    //读入矩阵中的每一个数  
    for(i=0; i<n; i++){  
        for(j=0; j<n; j++){  
            scanf("%d",&temp);  
            matrix[i][j]=temp;  
        }  
    }  
  
    //测试读入的数据是否正确  
/*  {  
        for(i=0; i<n; i++){  
            printf("%d\t",i);  
            for(j=0; j<n; j++){  
                printf("%d\t",matrix[i][j]);  
            }  
            printf("\n");  
        }  
    }  
*/  
    //开始寻找鞍点  
    for(i=0; i<n; i++){    
        //找出每行中的最大的数字  
        temp=matrix[i][0];  //用temp与count标识出每行中最大的数字以及位置  
        count=0;  
        for(j=1; j<n; j++){  
            if(temp<matrix[i][j]){     
                temp=matrix[i][j];  
                count=j;  
            }  
        }  
        //测试一下,此行最大的数字,是否是其所在列的最小数字  
        for(j=0;j<n;j++){  
            if(matrix[j][count]<temp){  
                flag++; //如果有数字小temp,flag就不为零  
            }  
        }  
        if(flag==0){    //测试flag值,如果为零,证明此数正是要找的鞍点  
            printf("%d %d\n",i,count);  
            break;  
        }  
        flag=0;  
    }  
    //如果没找到鞍数,循环终止,输出“NO”  
    if(i==n){  
        printf("NO");  
    }  
    return 0;  
}  

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页