中国大学慕课C语言第七讲作业
来源:互联网 发布:dhcp 默认端口 编辑:程序博客网 时间:2024/05/16 08:50
1. 多项式加法
题目内容:
一个多项式可以表达为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
我实在写不出来,所以放上几个大神写的,方便自己学习。各位大佬先收下我的膝盖。。。(哭
1. happy_bigqiang大神的:
这里是链接
#include <stdio.h>#include <stdlib.h>#define SIZE 10/*1 注意flag的存放,不能放在for循环里面,否则每次for循环都置flag=0,导致内层else始终无法执行;2 判断条件中,arr[i]与i不要弄混了,这是逻辑错误3 总体思路,先按系数分三类1,每类1里面,按首项和其他项分类2,每类2里面再按指数不同分三种处理情况,对应输出不同格式*/int main(){ int coef,expo; int cnt=0; int arr[SIZE]; int i,flag; for (i=0;i<SIZE;i++){ arr[i]=0; } while(scanf("%d %d",&expo,&coef)){ arr[expo] += coef; // 这一步忘了要可以实现重复加,所以要多个+号 if (expo == 0) cnt++; if (cnt == 2) break; } //忘了加for 以便逆序输出int flag = 0; //不能放在for循环里面,否则每次for循环都置flag=0,导致内层else始终无法执行; for (i=SIZE-1;i>=0;i--){ if (arr[i]>1 || arr[i] <-1){ //判断条件中,arr[i]与i不要弄混了,这是逻辑错误 if (!flag){ flag = 1; if (i>1){ printf("%dx%d",arr[i],i); } else if (i == 1){ printf("%dx",arr[i]); } else{ printf("%d",arr[i]); } } else { if (i>1){ printf("%+dx%d",arr[i],i); } else if (i == 1){ printf("+%dx",arr[i]); } else{ printf("+%d",arr[i]); } } } else if (arr[i] == 1){ flag = 1; if (!flag){ flag = 1; if (i>1){ printf("x%d",i); } else if (i == 1){ printf("x"); } else{ printf("1"); } } else { if (i>1){ printf("+x%d",i); } else if (i == 1){ printf("+x"); } else{ printf("+1"); } } } else if (arr[i] == -1){ if(!flag){ flag =1; if (i>1){ printf("-x%d",i); } else if (i == 1){ printf("-x"); } else { printf("-1"); } } } } if (flag == 0) printf("0"); return 0;}
2. 这个是物理公司的大神写的:
这里写链接内容
#include <stdio.h>#include <math.h>void outNum(int j,int k){ int absk = abs(k); if(absk==1 && j!=1 && j!=0) { printf("x%d",j); } else if(absk==1 && j!=0) { printf("x"); } else if(absk==1) { printf("%d",absk); } else if(j==0) { printf("%d",absk); } else if(j==1) { printf("%dx",absk); } else { printf("%dx%d",absk,j); }}int main(){ int num[101] = { (0) }; int cut = 0; int ent = 0; int i,j,k; while(cut < 2) { k=0; scanf("%d %d",&j,&k); num[j] += k; if(j==0) cut++; } for(i=100;i>-1;i--) { j=i; k=num[j]; if(k!=0) { ent++; if(cut==2) { if(k<0) printf("-"); outNum(j,k); cut ++; } else { if(k<0) { printf("-"); outNum(j,k); } else { printf("+"); outNum(j,k); } } } } if(ent==0) printf("0"); return 0;}
3. wxx0136大神的代码:
这个也最短的
这里是链接
#include <stdio.h>#include <Windows.h>int mi = 0;//幂int xiShu = 0;//系数int num[101];//多项式数组void getDuoXiangShi();int main() { //初始化数组,因为幂最大为100,因此数组只需有101个元素即可,即0-100 for(int i=0;i<101;i++){ num[i] = 0; } //取第一个多项式 getDuoXiangShi(); //取第二个多项式 getDuoXiangShi(); //从最高幂开始,打印2个多项式的和 for (int i = 100; i >= 0; i--) { if (num[i] != 0) { if (i == 0) { printf("%d", num[i]); } else if( i == 1) { printf("%dx+", num[i]); } else { printf("%dx%d+", num[i], i); } } } printf("\n"); system("pause"); return 0;}void getDuoXiangShi(){ do { scanf_s("%d %d", &mi, &xiShu); num[mi] += xiShu;//先把同样幂的系数合并 } while (mi != 0);}
4. 邓戈麟大神的代码:
链接在这里
#include <stdio.h>main(){ int a[101][2], b[101][2], c[101][2]; int i, j, m, n, cnt = 0; for (i = 0; i < 101; i++) /* a表清零 */ { for (j = 0; j < 2; j++) { a[i][j] = 0; } } for (i = 0; i < 101; i++) /* b表清零 */ { for (j = 0; j < 2; j++) { b[i][j] = 0; } } for (i = 0; i < 101; i++) /* c表清零 */ { for (j = 0; j < 2; j++) { c[i][j] = 0; } } do { scanf("%d %d", &m, &n); a[m][0] = m; c[m][0] = m; a[m][1] = n; } while (m != 0); /* 输入a表,输入c表的第0列幂,不输入c表的第1列系数 */ do { scanf("%d %d", &m, &n); b[m][0] = m; c[m][0] = m; b[m][1] = n; } while (m != 0); /* 输入b表,输入c表的第0列幂,不输入c表的第1列系数 */ for (i = 0, j = 1; i < 101; i++) /* 统计c表的第1列系数 */ { c[i][1] = a[i][1] + b[i][1]; } for (i = 100; i > 1; i--) /* 从c表的第100行开始循环,一直到第2行 */ { if (c[i][1] != 0) /* 只统计c表第1列系数不为0 */ { if (c[i][1] == 1) /* 如果c表第1列系数==1,比如40 1 */ { if (cnt > 0) /* 如果输出超过一次,记得前面加正号+ */ { printf("+"); } printf("x%d", c[i][0]); /* 输出x40 */ } else if (c[i][1] == -1) /* 如果c表第1列系数==-1,比如40 -1 */ { printf("-x%d", c[i][0]); /* 前面加负号-,系数-1省略,输出-x40 */ } else /* 其他情况,c表第1列系数不等于1,也不等于-1 */ { if (c[i][1] < 0) { printf("%dx%d", c[i][1], c[i][0]); /* 系数小于0,直接输出 */ } else { if (cnt > 0) { printf("+"); /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */ } printf("%dx%d", c[i][1], c[i][0]); } } cnt++; } } if (c[1][1] != 0) /* c表第1行第1列系数不等于0 */ { { if (c[1][1] == 1) /* 如果c表第1列系数==1 */ { if (cnt > 0) { printf("+"); /* 如果输出超过一次,记得前面加正号+ */ } printf("x"); } else if (c[1][1] == -1) /* 如果c表第1列系数==-1 */ { printf("-x"); } else { if (a[1][1] > 0 && cnt > 0) /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */ { printf("+"); /* 如果输出超过一次,记得前面加正号+ */ } printf("%dx", c[1][1]); } cnt++; } } if (c[0][1] != 0) { if (cnt > 0) { printf("+"); /* 如果系数大于0,需要考虑是否第一次输出,不是第一次输出,需要前面加正号+ */ } printf("%d", c[0][1]); cnt++; } if (cnt == 0) { printf("0"); }}
2. 鞍点
题目内容:
给定一个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
我的目前还没写出来,随后放上。
纯爱枫若情大神的:
链接在这里
//寻找一个方形矩阵的鞍点(saddle point) #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; }
网上的另一个clickyeah大神的:
链接在这里
#include <stdio.h>#define M 100#define N 100int main(void) { int i,j,m,n; int max,jmax,flag,f = 1; int a[M][N]; while(scanf("%d",&n) != EOF){ for(i = 0; i < n; ++i) for(j = 0; j < n; ++j) scanf("%d",&a[i][j]); for(i = 0; i < n; ++i){ max = a[i][0]; jmax = 0; for(j = 1; j < n; ++j) { // 找出i行最大的 if(max < a[i][j]){ max = a[i][j]; jmax = j; // 且记录所在的列坐标 } } flag = 1; // 预置标志 int ii; for(ii = 0; ii < n && flag; ++ii) { // 判断max是否为所在列最小的 if(a[ii][jmax] < max) // 不是 flag = 0; // 则清标志 } if(flag == 1){ printf("%d %d\n",i,jmax); f = 0; } } if(f) printf("NO\n"); } return 0;}
- 中国大学慕课C语言第七讲作业
- 中国大学慕课C语言第七讲笔记
- C语言中国大学慕课第三讲作业
- 中国大学慕课C语言第一讲作业
- 中国大学慕课C语言第二讲作业
- 中国大学慕课C语言第四讲作业
- 中国大学慕课C语言第五讲作业
- 中国大学慕课C语言第六讲作业
- 中国大学慕课C语言第一讲笔记
- 中国大学慕课C语言第二讲笔记
- 中国大学慕课C语言第三讲笔记
- 中国大学慕课C语言第四讲笔记
- 中国大学慕课C语言第五讲笔记
- 中国大学慕课C语言第六讲笔记
- 中国大学慕课C语言第八讲笔记
- 中国大学MOOC-翁恺-C语言程序习题第七周
- C语言第七堂作业
- C语言第七次作业
- nodejs multer上传文件
- Machine Learning Demo
- Magento2开发教程
- 虚拟机里无法识别usb设备
- Cocos2d-x实现计时器与定时器功能
- 中国大学慕课C语言第七讲作业
- imageMagick安装和php imagick扩展安装
- 时间序列分析之AR模型、MA模型和ARMA模型(二)
- Web基础之Request对象与Response对象
- Magento 2 页面缓存和默认缓存中使用Redis
- web开发框架详解
- JVM访问控制器--AccessController
- (169)材质属性表达式
- 如何用springcloud找妹纸之1--- 尚未配妥剑,转眼便江湖(springcloud全家福)