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 <stdio.h>
int main()
{
int n,x;
int flag = 1;
printf("please input : ");
scanf("%d %d", &n, &x);
int arr[n];
for(int i=0; i<n; i++){
// int a;
// scanf("%d", &a);
// arr[i] = a;
scanf("%d", &arr[i]);
}
for(int i=0; i<n; 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 <stdio.h>
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<n; i++){
scanf("%d", &a);
while(a > 0){
int tmp = a % 10;
arr[s] = tmp;
a /= 10;
s++;
}
}
for(int i=0; i<s; 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<r; 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 <stdio.h>
#include <string.h>
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<t; i++ )
{
scanf("%d", &a[i]);
}
for ( i=0; i<t; 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 <stdio.h>
int main()
{
int m,n,flag=0;
printf("please input : ");
scanf("%d %d", &m, &n);
int arr[m][n];
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
scanf("%d", &arr[i][j]);
}
}
printf("\nresult:\n");
for(int i=1; i<m-1; i++){
for(int j=1; j<n-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 <stdio.h>
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<arr[i]; 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<num[i]; j++){
// printf("%d", num[i]);
// }
// }
return 0;
}