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>
int a[110]={0};
int main(int argc, char **argv) {
//memset(a,0,sizeof(a));
int c,d;
do{
scanf("%d%d",&c,&d);
a[c]=d;
}while(c!=0);
int e,f;
do{
scanf("%d%d",&e,&f);
a[e]+=f;
}while(e!=0);
int count=0;
for(int i=109;i>1;--i){
if(a[i]!=0){
if(a[i]==1){
if(count==0){
printf("x%d",i);
count++;
}
else{
printf("+x%d",i);
count++;
}
}
else if(a[i]>0){
if(count==0){
printf("%dx%d",a[i],i);
count++;
}
else{
printf("+%dx%d",a[i],i);
count++;
}
}
else if(a[i]==-1){
printf("-x%d",i);
count++;
}
else{
printf("%dx%d",a[i],i);
count++;
}
}
}
if(a[1]!=0){
if(a[1]==1){
if(count==0){
printf("x");
count++;
}
else{
printf("+x");
count++;
}
}
else if(a[1]>0){
if(count==0){
printf("%dx",a[1]);
count++;
}
else{
printf("+%dx",a[1]);
count++;
}
}
else if(a[1]==-1){
printf("-x");
count++;
}
else{
printf("%dx",a[1]);
count++;
}
}
if(a[0]!=0){
if(count==0){
printf("%d",a[0]);
count++;
}
else{
printf("+%d",a[0]);
count++;
}
}
if(a[0]==0 && count==0){
printf("%d",0);
}
return 0;
}
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>
int main(int argc, char **argv) {
int n;
scanf("%d",&n);
int num;
int an;
int a[n][n];
int count;
int flag=0;
int i;
for(i=0;i<n;++i){
for(int j=0;j<n;++j){
scanf("%d",&num);
a[i][j]=num;
}
}
for(i=0;i<n;++i){
an=a[i][0];
count=0;
for(int j=1;j<n;j++){
if(a[i][j]>an){
an=a[i][j];
count=j;
}
}
for(int j=0;j<n;++j){
if(a[j][count]<an){
flag++;
}
}
if(flag==0){
printf("%d %d\n",i,count);
break;
}
flag=0;
}
if(i==n){
printf("NO");
}
return 0;
}