第五章 作业

This commit is contained in:
xtaodada 2021-11-19 19:20:55 +08:00
parent 2bd982ce11
commit b80a5b9ef4
No known key found for this signature in database
GPG Key ID: EE4DC37B55E24736
15 changed files with 561 additions and 1 deletions

71
05-1/1/README.md Normal file
View File

@ -0,0 +1,71 @@
【问题描述】
从键盘输入一个正整数nn∈[1,10]表示进行乘法运算的两个整形方阵的阶。然后分别输入两个整形方阵A和B计算A×B后将结果输出到屏幕。
【输入形式】
从键盘输入一个正整数,然后再输入两个整形方阵。
【输出形式】
在屏幕上输出两个整形方阵的乘积。
【输入样例】
```
3
1 1 1
3 3 3
6 6 6
9 9 9
6 6 6
5 5 5
```
【输出样例】
```
########20########20########20
########60########60########60
#######120#######120#######120
```
【样例说明】
首先输入正整数3,说明接下来要输入的方阵是3×3的。因为
```
1 1 1 9 9 9 20 20 20
3 3 3 × 6 6 6 = 60 60 60
6 6 6 5 5 5 120 120 120
```
所以在屏幕上打印:
```
########20########20########20
########60########60########60
#######120#######120#######120
```
注:"#"代表空格每个输出的整数占10位不足10位在整数的左边用空格补足。
【评分标准】
结果完全正确得20分每个测试点4分提交程序文件名称为c12.c。
# 运行结果
成功通过编译, 且无编译警告
共有测试数据:5
平均占用内存:1.967K
平均CPU时间:0.00581S
平均墙钟时间:0.00584S
测试数据 评判结果
测试数据1 完全正确
测试数据2 完全正确
测试数据3 完全正确
测试数据4 完全正确
测试数据5 完全正确

31
05-1/1/c12.c Normal file
View File

@ -0,0 +1,31 @@
#include<stdio.h>
int main(){
int n,a[10][10],b[10][10],c[10][10];
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
scanf("%d",&b[i][j]);
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
c[i][j]=0;
for(int k=0;k<n;k++){
c[i][j]+=a[i][k]*b[k][j];
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
printf("%10d",c[i][j]);
printf("\n");
}
return 0;
}

58
05-1/2/README.md Normal file
View File

@ -0,0 +1,58 @@
【问题描述】
求二维整型数组的“最大点”。二维数组的“最大点”定义为:某个数是所在行的最大值,并且是所在列的最大值。注意:某行或某列上可能有多个“最大点”。
【输入形式】
从控制台读入二维数组。
第一行只有以空格分隔的两个正整数n和mn,m<=10n代表二维数组的行数m代表二维数组的列数。
然后在后续n行上输入二维数组的元素每行有m个以若干空格分隔的整数代表二维数组在该行上的所有元素。
【输出形式】
向控制台输出二维数组的“最大点”按行下标、列下标从小到大的顺序输出每行一个先输出“最大点”数值再输出对应的行数、列数行列都从1开始计数以一个空格分隔。
【样例输入】
```
3 4
8 60 7 100
10 498 12 49
-71 132 4 85
```
【样例输出】
```
100 1 4
498 2 2
```
【样例说明】
输入了一个三行四列的二维数组第一行第四列的元素100是第一行的最大元素同时也是第四列的最大元素所以该元素是“最大点”输出100 1 4。同样第二行第二列的元素498也是第二行的最大元素同时是第二列的最大元素故该元素也是“最大点”输出498 2 2。
【评分标准】
该题要求输出二维数组的所有“最大点”共有5个测试点。上传C语言文件名为 `example1b.c`
# 运行结果
成功通过编译, 且无编译警告
共有测试数据:5
平均占用内存:1.945K
平均CPU时间:0.00517S
平均墙钟时间:0.00516S
测试数据 评判结果
测试数据1 完全正确
测试数据2 完全正确
测试数据3 完全正确
测试数据4 完全正确
测试数据5 完全正确

44
05-1/2/example1b.c Normal file
View File

@ -0,0 +1,44 @@
#include<stdio.h>
int get_max_hang(int a[10][10],int n,int l){
int max=a[n][0];
for(int i=0;i<l;i++){
if(max<a[n][i]){
max=a[n][i];
}
}
return max;
}
int get_max_lie(int a[10][10],int n,int h){
int max=a[0][n];
for(int i=0;i<h;i++){
if(max<a[i][n]){
max=a[i][n];
}
}
return max;
}
void print_value_list(int a[10][10],int n,int h,int l,int max){
for(int i=0;i<l;i++){
if(a[n][i]==max){
if(a[n][i]==get_max_lie(a,i,h)){
printf("%d %d %d\n",a[n][i],n+1,i+1);
}
}
}
}
int main()
{
int a[10][10],n,l,max;
scanf("%d %d",&n,&l);
for(int i=0;i<n;i++){
for(int j=0;j<l;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<n;i++){
max=get_max_hang(a,i,l);
print_value_list(a,i,n,l,max);
}
}

75
05-1/3/README.md Normal file
View File

@ -0,0 +1,75 @@
【问题描述】
从标准输入中输入一个NN<=9阶矩阵和一个MM<=N阶矩阵判断矩阵M是否是N的子矩阵若是则输出M在N中的起始位置若不是则输出-1。若矩阵M能与N中某一区域完全相等则称M是N的子矩阵。
【输入形式】
从标准输入读取矩阵。
第一行只有一个整数N代表第一个矩阵的阶数。后续有N行输入每行有N个以若干空格分隔的整数代表该矩阵在该行上的所有元素。
输入完N阶矩阵后再在下一行输入一个整数M代表第二个矩阵的阶数。后续有M行输入每行有M个以若干空格分隔的整数代表该矩阵在该行上的所有元素。
【输出形式】
输出M在N中的起始位置即N中的第几行第几列两个数字用逗号“,”分隔从第1行第1列开始计数矩阵第一个元素的位置为1,1。
若N有多个子矩阵与M矩阵完全相同则输出首先找到的起始位置即行最小的位置若行相同则为列最小的位置。
若M不是N的子矩阵则输出-1。
【样例输入】
```
6
3 9 15 25 -9 0
36 102 2 5 67 89
8 12 58 6 53 456
67 7 895 -12 65 -83
-56 812 25 0 72 61
4 71 69 -4 341 970
3
6 53 456
-12 65 -83
0 72 61
```
【样例输出】
```
3,4
```
【样例说明】
第一个矩阵为6阶矩阵第二个矩阵为3阶矩阵第二个矩阵与第一个矩阵的某个子矩阵起始位置为第3行第4列的3阶矩阵完全相同故输出3,4行列数用逗号隔开。
【评分标准】
该题要求输出M矩阵在N矩阵的起始位置。上传C语言文件名为 `example2b.c`
# 运行结果
成功通过编译, 且无编译警告
共有测试数据:5
平均占用内存:1.949K
平均CPU时间:0.00617S
平均墙钟时间:0.00618S
测试数据 评判结果
测试数据1 完全正确
测试数据2 完全正确
测试数据3 完全正确
测试数据4 完全正确
测试数据5 完全正确

40
05-1/3/example2b.c Normal file
View File

@ -0,0 +1,40 @@
#include<stdio.h>
int main(){
int a[10][10],b[10][10],n1,n2,temp;
scanf("%d",&n1);
for(int i=0;i<n1;i++){
for(int j=0;j<n1;j++){
scanf("%d",&a[i][j]);
}
}
scanf("%d",&n2);
for(int i=0;i<n2;i++){
for(int j=0;j<n2;j++){
scanf("%d",&b[i][j]);
}
}
for(int i=0;i<n1-n2+1;i++){
for(int j=0;j<n1-n2+1;j++){
if(a[i][j]==b[0][0]){
temp = 1;
for(int k=0;k<n2;k++){
for(int l=0;l<n2;l++){
if(a[i+k][j+l]!=b[k][l]){
temp = 0;
}
}
}
if(temp==1){
printf("%d,%d",i+1,j+1);
return 0;
}
}
}
}
printf("-1");
return 0;
}

26
05-1/4/4.c Normal file
View File

@ -0,0 +1,26 @@
#include<stdio.h>
int main(){
int n=0,k=0;
char a;
while(scanf("%c",&a)!=EOF){
if(a=='\n'){
break;
}
if(a==' ') {
if(k==0){
k=1;
n++;
continue;
}
continue;
}
k=0;
}
if(k==1){
n--;
}
printf("%d",n+1);
return 0;
}

37
05-1/4/README.md Normal file
View File

@ -0,0 +1,37 @@
【问题描述】
输入一行字符(不多于80个字符),统计并输出其中的"单词"数,这里所谓"单词"就是由可显示字符组成的一子字符串,"单词"间用一个或多个空格分隔,首"单词"前和末"单词"后,可以有也可以没有空格。
【输入形式】
从键盘输入一行字符不多于80个字符
【输出形式】
输出"单词"的个数。
【样例输入】
```
abcd x1y2z3 qwe#$&% 789 * end
```
【样例输出】
```
6
```
# 运行结果
成功通过编译, 且无编译警告
共有测试数据:3
平均占用内存:1.941K
平均CPU时间:0.00469S
平均墙钟时间:0.00469S
测试数据 评判结果
测试数据1 完全正确
测试数据2 完全正确
测试数据3 完全正确

15
05-1/5/5.c Normal file
View File

@ -0,0 +1,15 @@
#include <stdio.h>
int main()
{
int n=30,t1=1,t2=1,t3;
for(int i=1;i<=n;i++){
printf("%d\t", t1);
t3 = t1+t2;
t1 = t2;
t2 = t3;
if((i%5==0)&&(i/5!=6))printf("\n");
}
return 0;
}

41
05-1/5/README.md Normal file
View File

@ -0,0 +1,41 @@
【问题描述】
用数组计算fibonacci数列的前30个数并按每行打印5个数的格式输出。间隔为tab。
【输入形式】
【输出形式】
```
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
10946 17711 28657 46368 75025
121393 196418 317811 514229 832040
```
【样例输入】
【样例输出】
【样例说明】
【评分标准】
# 运行结果
成功通过编译, 且无编译警告
共有测试数据:1
平均占用内存:1.902K
平均CPU时间:0.00419S
平均墙钟时间:0.00420S
测试数据 评判结果
测试数据1 完全正确

57
05-1/6/README.md Normal file
View File

@ -0,0 +1,57 @@
【问题描述】
比较两组整数是否有相同的元素每组整数个数不超过100。若有相同的元素则按照由大到小的顺序输出相同的元素重复出现的元素只输出一个。如果没有相同元素打印字符串No Answer。
【输入形式】
首先从标准输入(键盘)输入第一组整数的个数,再输入第一组整数,以一个空格分割;然后输入第二组整数的个数,再输入第二组整数,以一个空格分割。
【输出形式】
按照由大到小的顺序向标准输出显示器输出两组整数中相同的元素以一个空格分隔如果没有相同元素则打印“No Answer”。
【输入样例】
```
9
2 5 10 17 10 8 5 10 12
7
12 8 10 17 5 2 1009
```
【输出样例】
```
17 12 10 8 5 2
```
【样例说明】
输入两组整数
```
2 5 10 17 10 8 5 10 12
12 8 10 17 5 2 1009
```
由于这两个数组具有相同的元素,按照由大到小的顺序输出为:`17 12 10 8 5 2`。
【评分标准】
该题要求输出相同元素共5个测试点。提交程序文件名为exam1.c。
# 运行结果
成功通过编译, 且无编译警告
共有测试数据:5
平均占用内存:1.942K
平均CPU时间:0.00536S
平均墙钟时间:0.00537S
测试数据 评判结果
测试数据1 完全正确
测试数据2 完全正确
测试数据3 完全正确
测试数据4 完全正确
测试数据5 完全正确

49
05-1/6/exam1.c Normal file
View File

@ -0,0 +1,49 @@
#include <stdio.h>
int test_if_have_value(int a[100],int n,int value){
for(int i=0;i<n;i++){
if(a[i]==value)return 1;
}
return 0;
}
int main()
{
int a[100],b[100],c[100],n1,n2,n_=0,temp;
scanf("%d",&n1);
for(int i=0;i<n1;i++){
scanf("%d",&a[i]);
}
scanf("%d",&n2);
for(int i=0;i<n2;i++){
scanf("%d",&b[i]);
}
for(int i=0;i<n1;i++){
for(int j=0;j<n2;j++){
if(a[i]==b[j]){
if(!test_if_have_value(c,n_,a[i])){
c[n_]=a[i];
n_++;
}
}
}
}
for(int i=0;i<n_;i++){
for(int j=i;j<n_;j++){
if(c[i]<c[j]){
temp=c[i];
c[i]=c[j];
c[j]=temp;
}
}
}
if(n_==0)printf("No Answer");
else{
for(int i=0;i<n_;i++){
printf("%d ",c[i]);
}
}
return 0;
}

3
05-1/README.md Normal file
View File

@ -0,0 +1,3 @@
# 第五章 作业
> 作业时间: 2021-11-16 19:45:00 至 2021-12-05 23:55:00

View File

@ -1,5 +1,11 @@
add_executable(CMakeLists CMakeLists.txt)
add_executable(1 05/1/1.c)
add_executable(2 05/2/2.c)
add_executable(no 05/3/no.c)
add_executable(c0604 05/4/c0604.c)
add_executable(CMakeLists CMakeLists.txt)
add_executable(c12 05-1/1/c12.c)
add_executable(exam1b 05-1/2/exam1b.c)
add_executable(example2b 05-1/3/example2b.c)
add_executable(4 05-1/4/4.c)
add_executable(5 05-1/5/5.c)
add_executable(exam1 05-1/6/exam1.c)

View File

@ -49,3 +49,10 @@ A repo to record my study life.
- [2. 查找最大最小整数](https://github.com/xtaodada/C-study/tree/master/05/2)
- [3. 给一个整型数组编号a](https://github.com/xtaodada/C-study/tree/master/05/3)
- [4. 回文判断](https://github.com/xtaodada/C-study/tree/master/05/4)
- [第五章 作业](https://github.com/xtaodada/C-study/tree/master/05-1)
- [1. 方阵乘法运算](https://github.com/xtaodada/C-study/tree/master/05-1/1)
- [2. 二维整型数组的“最大点”](https://github.com/xtaodada/C-study/tree/master/05-1/2)
- [3. 判断一个矩阵是另一个矩阵的子矩阵](https://github.com/xtaodada/C-study/tree/master/05-1/3)
- [4. 统计“单词”数](https://github.com/xtaodada/C-study/tree/master/05-1/4)
- [5. 使用数组编程计算fibonacci数列的前30个数](https://github.com/xtaodada/C-study/tree/master/05-1/5)
- [6. 比较两组整数(新)](https://github.com/xtaodada/C-study/tree/master/05-1/6)