c语言第八周上机作业答案,中国大学MOOC-翁恺-C语言-PAT习题及解答-第八周

08-0. 查找整数(10)

本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);

如果没有找到,输出“Not Found”。

输入格式:输入在第1行中给出2个正整数N(<=20)和X,第2行给出N个整数。数字均不

超过长整型,其间以空格分隔。

输出格式:在一行中输出X的位置,或者“Not Found”。

输入样例1:5 7

3 5 7 1 9

输出样例1:2

输入样例2:5 7

3 5 8 1 9

输出样例2:Not Found

#include

int main()

{

int n,x;

int flag = 1;

printf("please input : ");

scanf("%d %d", &n, &x);

int arr[n];

for(int i=0; i

// int a;

// scanf("%d", &a);

// arr[i] = a;

scanf("%d", &arr[i]);

}

for(int i=0; i

if(arr[i] == x){

flag = 0;

printf("address : %d", i);

}

}

if(flag) printf("Not Found");

return 0;

}

08-1. 求一批整数中出现最多的个位数字(20)

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、

2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范

围的正整数,数字间以空格分隔。

输出格式:在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现

次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

输入样例:3

1234 2345 3456

输出样例:3: 3 4

#include

int main()

{

int n,a;

int s=0;//计算共有多少个数字

int arr[100];//存放输入的整数拆分出来的个位数

int number[10] = {0};//索引即数,对应的值即为其个数

printf("please input : ");

scanf("%d", &n);

for(int i=0; i

scanf("%d", &a);

while(a > 0){

int tmp = a % 10;

arr[s] = tmp;

a /= 10;

s++;

}

}

for(int i=0; i

// printf("%d === %d\n", i, arr[i]);

number[arr[i]]++;

}

int max = -1;

// int r = 0;

// int res[10] = {0};

for(int i=0; i<10; i++){

// printf("%d --> %d\n", i, number[i]);

if(number[i] > max) max = number[i];

}

// for(int i=0; i<10; i++){

// if(number[i] == max){

// res[r] = i;

// r++;

// }

// }

// printf("%d :", max);

// for(int i=0; i// printf(" %d", res[i]);

// }

// // 将以上注释的两个for循环简写为以下一个for循环

// // 直接判断索引值是否为最大数量max,是则输出其索引

printf("%d :", max);

for(int i=0; i<10; i++){

if(number[i] == max){

printf(" %d", i);

}

}

return 0;

}

#include

#include

int a[1002];

int main()

{

int t, i, max = 0;

int count[10];

scanf("%d", &t);

for ( i=0; i<10; i++ )

{

count[i] = 0;

}

for ( i=0; i

{

scanf("%d", &a[i]);

}

for ( i=0; i

{

while (a[i])

{

count[a[i]%10]++;

a[i] /= 10;

}

}

for ( i=0; i<10; i++ )

{

if ( max < count[i] )

{

max = count[i];

}

}

printf("%d:", max);

for ( i=0; i<10; i++ )

{

if ( count[i] == max )

{

printf(" %d", i);

}

}

printf("\n");

return 0;

}

08-2. 求矩阵的局部极大值(15)

给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称

元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

输入格式:输入在第1行中给出矩阵A的行数M和列数N(3<=M,N<=20);最后M行,每行给出A在

该行的N个元素的值。数字间以空格分隔。

输出格式:每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。

要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部

极大值,则输出“None 总行数 总列数”。

输入样例1:

4 5

1 1 1 1 1

1 3 9 3 1

1 5 3 5 1

1 1 1 1 1

输出样例1:

9 2 3

5 3 2

5 3 4

输入样例2:

3 5

1 1 1 1 1

9 3 9 9 1

1 5 3 5 1

输出样例2:

None 3 5

#include

int main()

{

int m,n,flag=0;

printf("please input : ");

scanf("%d %d", &m, &n);

int arr[m][n];

for(int i=0; i

for(int j=0; j

scanf("%d", &arr[i][j]);

}

}

printf("\nresult:\n");

for(int i=1; i

for(int j=1; j

// printf("%d ", arr[i][j]);

if(arr[i][j]>arr[i][j+1] && arr[i][j]>arr[i][j-1] && arr[i][j]>arr[i-1][j] && arr[i][j]>arr[i+1][j]){

printf("%d %d %d\n", arr[i][j], i+1, j+1);

flag = 1;

}

}

}

if(!flag){

printf("None %d %d", m, n);

}

return 0;

}

08-3. 组个最小数 (20)

给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数

尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是

10015558。现给定数字,请编写程序输出能够组成的最小的数。

输入格式:每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有

数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥

有1个非0的数字。

输出格式:在一行中输出能够组成的最小的数。

输入样例:2 2 0 0 0 3 0 0 1 0

输出样例:10015558

#include

int main()

{

int arr[10];

for(int i=0; i<10; i++){

scanf("%d", &arr[i]);

}

for(int i=1; i<9; i++){

if(arr[i] != 0){

printf("%d", i);

arr[i] -= 1;

break;

}

}

for(int i=0; i<10; i++){

for(int j=0; j

printf("%d", i);

}

}

// for(int i=0; i<10; i++){

// scanf("%d", &arr[i]);

// num[arr[i]]++;

// }

// for(int i=0; i<10; i++){

// for(int j=0; j// printf("%d", num[i]);

// }

// }

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值