1.找鞍点
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。
输入样例1:
4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9
输出样例1:
2 1
输入样例2:
2 1 7 4 1
输出样例2:
NONE
//思路
先写主函数的思路,再写函数的
能写函数就行函数,思路很清晰!
1输入数组
2遍及每行找最大值,找出最大值的列下标
3验证行最大值是否为列下标的最小值,返回1表示Yes,返回0表示No
Yes则打印,No则继续循环,直到每一行都查完了,found==0,则打印NONE
#include <stdio.h>
int max_of_row(int a[][6], int n, int row)
{
int max = a[row][0];
for (int j = 0; j < n; j++)
{
if (a[row][j] > max)
{
max = a[row][j];
}
}
return max;
}
int testmin(int a[][6], int n, int col, int min)
{
for (int i = 0; i < n; i++)
{
if (a[i][col] < min)
return 0;//否定
}
return 1;//肯定
}
int main()
{
int a[6][6];
int n;
int found = 0;
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++)
{
int max = max_of_row(a, n, i);
//找到最大值对应的列标
for (int j = 0; j < n; j++)
{
if (a[i][j] == max)
{
//检验最大值是否为一列中的最小值
if (testmin(a, n, j, max) == 1)
{
printf("%d %d", i, j);
found = 1;
return 0;
}
}
}
}
if (found == 0)
printf("NONE\n");
return 0;
}
2.把能被3或5整除的数找出来。
输入格式:
第一行输入一个数n(0<n<=10),表示有n组测试数据。后面的n行输入多组输入数据,每一行都是一个数字m(0<m<=100)。
输出格式:
每组输入数据的输出占一行,结果为从1开始到m的范围内,输出所有能被3或者5整除的整数(包括m)。
输入样例:
在这里给出一组输入。例如:
3 5 10 20
输出样例:
在这里给出相应的输出。提示:每个数据后面都有一个空格。例如:
3 5 3 5 6 9 10 3 5 6 9 10 12 15 18 20
//思路:构建一个n行1列的数组,输入数字,用m来存放放入的数字
建立一个函数,负责找出并打印可以被3/5整除的所有数字
#include <stdio.h>
void fac(int m)
{
for (int i = 1; i <= m; i++)
{
if (i % 3 == 0 || i % 5 == 0)
{
printf("%d ", i);
}
}
printf("\n");
}
int main()
{
int n, m;
int a[10][1];
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 1; j++)
{
scanf("%d", &a[i][j]);
m = a[i][j];
//得出1-m的所有能被3/5整除的数字并打印
fac(m);
}
}
return 0;
}