第七章 函数作业
This commit is contained in:
parent
30b9f309c8
commit
65eed8f70f
50
07-1/1/README.md
Normal file
50
07-1/1/README.md
Normal file
@ -0,0 +1,50 @@
|
||||
【问题描述】
|
||||
|
||||
从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素不重复),合并两组整数,去掉在两组整数中都出现的整数,并按从小到大顺序排序输出(即两组整数集“异或”)。
|
||||
|
||||
【输入形式】
|
||||
|
||||
首先输入第一组整数的个数,再输入第一组整数,以空格分隔;然后输入第二组整数的个数,再输入第二组整数,以空格分隔。
|
||||
|
||||
【输出形式】
|
||||
|
||||
按从小到大顺序排序输出合并后的整数(去掉在两组整数中都出现的整数),输出整数间以一个空格分隔,最后不含回车符。
|
||||
|
||||
【样例输入】
|
||||
|
||||
```
|
||||
8
|
||||
5 1 4 3 8 7 9 6
|
||||
4
|
||||
5 2 8 10
|
||||
```
|
||||
|
||||
【样例输出】
|
||||
|
||||
```
|
||||
1 2 3 4 6 7 9 10
|
||||
```
|
||||
|
||||
【样例说明】
|
||||
|
||||
第一组整数个数为8,分别为5 1 4 3 8 7 9 6,第二组整数个数为4,分别为5 2 8 10。将第一组和第二组整数合并(去掉在两组整数中都出现的整数),并从小到大顺序排序后结果为1 2 3 4 6 7 9 10。
|
||||
|
||||
【评分标准】
|
||||
|
||||
结果完全正确得25分,每个测试点5分,提交程序文件名为 `exam2.c` 。
|
||||
|
||||
# 运行结果
|
||||
|
||||
成功通过编译, 且无编译警告
|
||||
|
||||
共有测试数据:5
|
||||
平均占用内存:1.943K
|
||||
平均CPU时间:0.00562S
|
||||
平均墙钟时间:0.00564S
|
||||
|
||||
测试数据 评判结果
|
||||
测试数据1 完全正确
|
||||
测试数据2 完全正确
|
||||
测试数据3 完全正确
|
||||
测试数据4 完全正确
|
||||
测试数据5 完全正确
|
49
07-1/1/exam2.c
Normal file
49
07-1/1/exam2.c
Normal file
@ -0,0 +1,49 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int test_if_have_value(int a[20],int c[40], int n, int n_, int value){
|
||||
int temp=1;
|
||||
for (int i = 0; i < n; i++) {
|
||||
if (a[i] == value){
|
||||
temp=0;
|
||||
}
|
||||
}
|
||||
if(temp){
|
||||
c[n_]=value;
|
||||
n_++;
|
||||
}
|
||||
return n_;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
int a[20],b[20],c[40],n_=0,n1,n2,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++){
|
||||
n_=test_if_have_value(b,c,n2,n_,a[i]);
|
||||
}
|
||||
for(int i=0;i<n2;i++){
|
||||
n_=test_if_have_value(a,c,n1,n_,b[i]);
|
||||
}
|
||||
|
||||
for(int i=0;i<n_;i++){
|
||||
for(int j=i+1;j<n_;j++){
|
||||
if(c[i]>c[j]){
|
||||
temp=c[i];
|
||||
c[i]=c[j];
|
||||
c[j]=temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int i=0;i<n_;i++){
|
||||
printf("%d ",c[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
46
07-1/2/README.md
Normal file
46
07-1/2/README.md
Normal file
@ -0,0 +1,46 @@
|
||||
【问题描述】
|
||||
|
||||
从标准输入中输入两组整数(每组不超过20个整数,每组整数中元素不重复,并且整数大于等于0),合并两组整数,重复的整数只出现一次,并按从小到大顺序排序输出(即两组整数集的“并集”)。
|
||||
|
||||
【输入形式】
|
||||
|
||||
在两行上分别输入两组整数,以一个空格分隔各个整数,以-1作为输入结束。
|
||||
|
||||
【输出形式】
|
||||
|
||||
按从小到大顺序排序输出合并后的整数集(以一个空格分隔各个整数,最后一个整数后的空格可有可无)。
|
||||
|
||||
【样例输入】
|
||||
|
||||
```
|
||||
5 105 4 32 8 7 9 60 -1
|
||||
5 2 87 10 105 0 -1
|
||||
```
|
||||
|
||||
【样例输出】
|
||||
|
||||
```
|
||||
0 2 4 5 7 8 9 10 32 60 87 105
|
||||
```
|
||||
|
||||
【样例说明】
|
||||
|
||||
第一组整数有8个,分别为5 105 4 32 8 7 9 60,第二组整数有6个,分别为5 2 87 10 105 0。将第一组和第二组整数合并(在两组整数中都出现的整数5和105只出现一次),并按从小到大顺序排序后结果为0 2 4 5 7 8 9 10 32 60 87 105。
|
||||
|
||||
【评分标准】该题要求输出两组整数的并集,共有5个测试点,提交程序文件名为 `or.c` 。
|
||||
|
||||
# 运行结果
|
||||
|
||||
成功通过编译, 且无编译警告
|
||||
|
||||
共有测试数据:5
|
||||
平均占用内存:1.945K
|
||||
平均CPU时间:0.00461S
|
||||
平均墙钟时间:0.00463S
|
||||
|
||||
测试数据 评判结果
|
||||
测试数据1 完全正确
|
||||
测试数据2 完全正确
|
||||
测试数据3 完全正确
|
||||
测试数据4 完全正确
|
||||
测试数据5 完全正确
|
51
07-1/2/or.c
Normal file
51
07-1/2/or.c
Normal file
@ -0,0 +1,51 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int test_if_have_value(int c[40], int n, int value){
|
||||
int temp=1;
|
||||
for (int i = 0; i < n; i++) {
|
||||
if(c[i]==value) temp=0;
|
||||
}
|
||||
if(temp){
|
||||
c[n]=value;
|
||||
n++;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
int a[20],b[20],c[40],n_=0,n1=0,n2=0,temp;
|
||||
for(int i=0,j;i<21;i++){
|
||||
scanf("%d",&j);
|
||||
if(j==-1) break;
|
||||
a[i]=j;
|
||||
n1++;
|
||||
}
|
||||
for(int i=0,j;i<21;i++){
|
||||
scanf("%d",&j);
|
||||
if(j==-1) break;
|
||||
b[i]=j;
|
||||
n2++;
|
||||
}
|
||||
|
||||
for(int i=0;i<n1;i++){
|
||||
n_=test_if_have_value(c,n_,a[i]);
|
||||
}
|
||||
for(int i=0;i<n2;i++){
|
||||
n_=test_if_have_value(c,n_,b[i]);
|
||||
}
|
||||
|
||||
for(int i=0;i<n_;i++){
|
||||
for(int j=i+1;j<n_;j++){
|
||||
if(c[i]>c[j]){
|
||||
temp=c[i];
|
||||
c[i]=c[j];
|
||||
c[j]=temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int i=0;i<n_;i++){
|
||||
printf("%d ",c[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
46
07-1/3/README.md
Normal file
46
07-1/3/README.md
Normal file
@ -0,0 +1,46 @@
|
||||
【问题描述】
|
||||
|
||||
从标准输入中输入两组整数(每组不超过20个整数,每组整数中的元素不重复,并且整数大于等于0),编程求两组整数的交集,即在两组整数中都出现的整数,并按从小到大顺序排序输出。若交集为空,则什么都不输出。
|
||||
|
||||
【输入形式】
|
||||
|
||||
在两行上分别输入两组整数,以一个空格分隔各个整数,以-1作为输入结束。
|
||||
|
||||
【输出形式】
|
||||
|
||||
按从小到大顺序排序输出两组整数的交集(以一个空格分隔各个整数,最后一个整数后的空格可有可无)。
|
||||
|
||||
【样例输入】
|
||||
|
||||
```
|
||||
5 105 0 4 32 8 7 9 60 -1
|
||||
5 2 87 10 105 0 32 -1
|
||||
```
|
||||
|
||||
【样例输出】
|
||||
|
||||
```
|
||||
0 5 32 105
|
||||
```
|
||||
|
||||
【样例说明】
|
||||
|
||||
第一组整数有9个,分别为5 105 0 4 32 8 7 9 60,第二组整数有7个,分别为5 2 87 10 105 0 32。在这两组整数中都出现的整数有四个,按从小到大顺序排序后输出的结果为0 5 32 105。
|
||||
|
||||
【评分标准】该题要求输出两组整数的交集,共有5个测试点,提交程序文件名为 `and.c` 。
|
||||
|
||||
# 运行结果
|
||||
|
||||
成功通过编译, 且无编译警告
|
||||
|
||||
共有测试数据:5
|
||||
平均占用内存:1.942K
|
||||
平均CPU时间:0.00484S
|
||||
平均墙钟时间:0.00483S
|
||||
|
||||
测试数据 评判结果
|
||||
测试数据1 完全正确
|
||||
测试数据2 完全正确
|
||||
测试数据3 完全正确
|
||||
测试数据4 完全正确
|
||||
测试数据5 完全正确
|
48
07-1/3/and.c
Normal file
48
07-1/3/and.c
Normal file
@ -0,0 +1,48 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int test_if_have_value(int b[20], int c[40], int n, int n_, int value){
|
||||
int temp=0;
|
||||
for (int i = 0; i < n; i++) {
|
||||
if(b[i]==value) temp=1;
|
||||
}
|
||||
if(temp){
|
||||
c[n_]=value;
|
||||
n_++;
|
||||
}
|
||||
return n_;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
int a[20],b[20],c[40],n_=0,n1=0,n2=0,temp;
|
||||
for(int i=0,j;i<21;i++){
|
||||
scanf("%d",&j);
|
||||
if(j==-1) break;
|
||||
a[i]=j;
|
||||
n1++;
|
||||
}
|
||||
for(int i=0,j;i<21;i++){
|
||||
scanf("%d",&j);
|
||||
if(j==-1) break;
|
||||
b[i]=j;
|
||||
n2++;
|
||||
}
|
||||
|
||||
for(int i=0;i<n1;i++){
|
||||
n_=test_if_have_value(b,c,n2,n_,a[i]);
|
||||
}
|
||||
|
||||
for(int i=0;i<n_;i++){
|
||||
for(int j=i+1;j<n_;j++){
|
||||
if(c[i]>c[j]){
|
||||
temp=c[i];
|
||||
c[i]=c[j];
|
||||
c[j]=temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int i=0;i<n_;i++){
|
||||
printf("%d ",c[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
58
07-1/4/README.md
Normal file
58
07-1/4/README.md
Normal file
@ -0,0 +1,58 @@
|
||||
【问题描述】
|
||||
|
||||
编写程序实现两个超长正整数(每个最长80位数字)的加法运算。
|
||||
|
||||
【输入形式】
|
||||
|
||||
从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。
|
||||
|
||||
1. 第一行是超长正整数A;
|
||||
2. 第二行是超长正整数B;
|
||||
|
||||
【输出形式】
|
||||
|
||||
输出只有一行,是两个长整数的运算结果,从高到低依次输出各位数字。各位数字紧密输出。
|
||||
|
||||
算法提示:
|
||||
|
||||
1. 用字符串输入两个超长整数,分别存放在两个字符串中,每一位对应一个字符串中的字符。
|
||||
2. 以较短的超长整数为基准,从低位到高位,对应位转换成数字后相加,再加上前一位相加的进位,得到的和模上10再转换为字符即为当前位,得到的和整除10即为当前位的进位。将计算得到的每一位保存到结果字符数组。
|
||||
3. 将较长字符串的剩余位加上最后一个进位移到结构数组后面。
|
||||
4. 将结果数组反序输出(去掉高位多余的0)。
|
||||
|
||||
【输入样例】
|
||||
|
||||
```
|
||||
134098703578230056
|
||||
234098
|
||||
```
|
||||
|
||||
【输出样例】
|
||||
|
||||
```
|
||||
134098703578464154
|
||||
```
|
||||
|
||||
【样例说明】
|
||||
|
||||
```
|
||||
进行两个正整数加法运算,134098703578230056 + 234098 = 134098703578464154。
|
||||
```
|
||||
|
||||
【评分标准】
|
||||
|
||||
完全正确得20分,每个测试点4分,提交程序文件名为 `add.c` 。
|
||||
|
||||
# 运行结果
|
||||
|
||||
成功通过编译, 且无编译警告
|
||||
|
||||
共有测试数据:5
|
||||
平均占用内存:1.924K 平均CPU时间:0.00571S 平均墙钟时间:0.00573S
|
||||
|
||||
测试数据 评判结果
|
||||
测试数据1 完全正确
|
||||
测试数据2 完全正确
|
||||
测试数据3 完全正确
|
||||
测试数据4 完全正确
|
||||
测试数据5 完全正确
|
79
07-1/4/add.c
Normal file
79
07-1/4/add.c
Normal file
@ -0,0 +1,79 @@
|
||||
#include<stdio.h>
|
||||
#include<string.h>
|
||||
|
||||
int add(char a, char b,int jinwei){
|
||||
return a-48+b-48+jinwei;
|
||||
}
|
||||
int str_move(char a[80],int n){
|
||||
for(int i=0;i<n-1;i++){
|
||||
a[i] = a[i+1];
|
||||
}
|
||||
return n-1;
|
||||
}
|
||||
void str_extend(char a[80],int n){
|
||||
for(int i=n-1;i>=0;i--){
|
||||
a[i+1] = a[i];
|
||||
}
|
||||
a[n+1] = '\0';
|
||||
a[0] = '0';
|
||||
}
|
||||
int main(){
|
||||
char a[90],b[90],c[90];
|
||||
int n,n_,max,max_,temp,jinwei=0;
|
||||
|
||||
scanf("%s %s", a, b);
|
||||
n=strlen(a);
|
||||
n_=strlen(b);
|
||||
|
||||
for(int i=0;i<n;i++){
|
||||
if(a[0]!='0') break;
|
||||
if(a[0]=='0'){
|
||||
n=str_move(a,n);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
for(int i=0;i<n_;i++){
|
||||
if(b[0]!='0') break;
|
||||
if(b[0]=='0'){
|
||||
n=str_move(b,n);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
max_ = max = n;
|
||||
if(n_>n) {
|
||||
max_ = max = n_;
|
||||
while(1){
|
||||
str_extend(a,n);
|
||||
n=strlen(a);
|
||||
if(n==n_) break;
|
||||
}
|
||||
|
||||
}
|
||||
if(n>n_) {
|
||||
while(1){
|
||||
str_extend(b,n_);
|
||||
n_=strlen(b);
|
||||
if(n==n_) break;
|
||||
}
|
||||
}
|
||||
|
||||
if(add(a[0],b[0],0)>9) {
|
||||
max_++;
|
||||
c[max] = '\0';
|
||||
c[0] = '1';
|
||||
}
|
||||
|
||||
for(int i=0;i<max;i++){
|
||||
temp=add(a[max-1-i],b[max-1-i],jinwei);
|
||||
if(temp>9) jinwei = 1;
|
||||
else jinwei = 0;
|
||||
c[max_-1-i] = temp%10 + 48;
|
||||
}
|
||||
|
||||
for(int i=0;i<max_;i++){
|
||||
printf("%c",c[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
58
07-1/5/README.md
Normal file
58
07-1/5/README.md
Normal file
@ -0,0 +1,58 @@
|
||||
【问题描述】
|
||||
|
||||
求二维整型数组的“最小点”。二维数组的“最小点”定义为:某个数是所在行的最小值,并且是所在列的最小值。注意:某行或某列上可能有多个“最小点”。
|
||||
|
||||
【输入形式】
|
||||
|
||||
从控制台读入二维数组。
|
||||
|
||||
第一行只有以空格分隔的两个正整数n和m(n,m<=10),n代表二维数组的行数,m代表二维数组的列数。
|
||||
|
||||
然后在后续n行上输入二维数组的元素,每行有m个以若干空格分隔的整数,代表二维数组在该行上的所有元素。
|
||||
|
||||
【输出形式】
|
||||
|
||||
向控制台输出二维数组的“最小点”,按行下标、列下标从小到大的顺序输出,每行一个,先输出“最小点”数值,再输出对应的行数、列数(行列都从1开始计数),以一个空格分隔。
|
||||
|
||||
【样例输入】
|
||||
|
||||
```
|
||||
3 4
|
||||
|
||||
8 60 1 100
|
||||
|
||||
10 498 12 49
|
||||
|
||||
-71 132 4 85
|
||||
```
|
||||
|
||||
【样例输出】
|
||||
|
||||
```
|
||||
1 1 3
|
||||
-71 3 1
|
||||
```
|
||||
|
||||
【样例说明】
|
||||
|
||||
输入了一个三行四列的二维数组,第一行第三列的元素1是第一行的最小元素,同时也是第三列的最小元素,所以该元素是“最小点”,输出1 1 3。同样第三行第一列的元素-71也是第三行的最小元素,同时是第一列的最小元素,故该元素也是“最小点”,输出-71 3 1。
|
||||
|
||||
【评分标准】
|
||||
|
||||
该题要求输出二维数组的所有“最小点”,共有5个测试点。上传C语言文件名为 `exam2.c` 。
|
||||
|
||||
# 运行结果
|
||||
|
||||
成功通过编译, 且无编译警告
|
||||
|
||||
共有测试数据:5
|
||||
平均占用内存:1.945K
|
||||
平均CPU时间:0.00531S
|
||||
平均墙钟时间:0.00530S
|
||||
|
||||
测试数据 评判结果
|
||||
测试数据1 完全正确
|
||||
测试数据2 完全正确
|
||||
测试数据3 完全正确
|
||||
测试数据4 完全正确
|
||||
测试数据5 完全正确
|
42
07-1/5/exam2.c
Normal file
42
07-1/5/exam2.c
Normal file
@ -0,0 +1,42 @@
|
||||
#include<stdio.h>
|
||||
|
||||
int get_h_min(int a[10][10], int h, int l){
|
||||
int temp=a[h][0];
|
||||
for(int i=1;i<l;i++){
|
||||
if(a[h][i]<temp){
|
||||
temp = a[h][i];
|
||||
}
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
int get_l_min(int a[10][10], int l, int h){
|
||||
int temp=a[0][l];
|
||||
for(int i=1;i<h;i++){
|
||||
if(a[i][l]<temp){
|
||||
temp = a[i][l];
|
||||
}
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
int main(){
|
||||
int a[10][10],h,l,temp;
|
||||
scanf("%d %d",&h,&l);
|
||||
|
||||
for(int i=0;i<h;i++){
|
||||
for (int j=0;j<l;j++){
|
||||
scanf("%d",&a[i][j]);
|
||||
}
|
||||
}
|
||||
|
||||
for(int i=0;i<h;i++){
|
||||
temp=get_h_min(a,i,l);
|
||||
for(int j=0;j<l;j++){
|
||||
if(temp==a[i][j]){
|
||||
if(temp==get_l_min(a,j,h)){
|
||||
printf("%d %d %d\n",temp,i+1,j+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
3
07-1/README.md
Normal file
3
07-1/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# 第六章 函数作业
|
||||
|
||||
> 作业时间: 2021-11-21 10:01:00 至 2021-12-18 10:00:00
|
@ -69,3 +69,9 @@ A repo to record my study life.
|
||||
- [实验七 指针(2学时)](https://github.com/xtaodada/C-study/tree/master/07)
|
||||
- [1. 利用指针,设计子函数实现求两个数的和差积商](https://github.com/xtaodada/C-study/tree/master/07/1)
|
||||
- [2. 对一组数据置逆,查找操作](https://github.com/xtaodada/C-study/tree/master/07/2)
|
||||
- [第六章 指针作业](https://github.com/xtaodada/C-study/tree/master/07-1)
|
||||
- [1. 数组异或](https://github.com/xtaodada/C-study/tree/master/07-1/1)
|
||||
- [2. 求两组整数的并集2](https://github.com/xtaodada/C-study/tree/master/07-1/2)
|
||||
- [3. 求两组整数的交集a](https://github.com/xtaodada/C-study/tree/master/07-1/3)
|
||||
- [4. 超长正整数的加法](https://github.com/xtaodada/C-study/tree/master/07-1/4)
|
||||
- [5. 二维整型数组的“最小点”](https://github.com/xtaodada/C-study/tree/master/07-1/5)
|
||||
|
Loading…
Reference in New Issue
Block a user