设计思路:
使用两个相同的二维数组,一个存数据,一个存是鞍点的可能性,可能性若为0,则不是鞍点;若为1,则不是鞍点,但是行最大数或者列最小数;若为2,则是鞍点;
首先,获取每行最大数,并赋给max,并将改行中与max相等的数是鞍点的可能性设为1,其他数的可能性设为0;
其次,获取每列最小数,并赋给min,并将该列中与min相等的数是鞍点的可能性增加1;
最后,判断每个数是鞍点的可能性,若是2,则是鞍点,输出。
流程图自己画吧
#include <stdioh>
#include <stdlibh>
#include <stringh>
#define ROW 3
#define COL 3
void main()
{
int a[ROW][COL];
int flag[ROW][COL]; //记录每个元素是鞍点的可能性,
int i, j, max, min, count=0;
printf("输入数组内容(%d行%d列):\n", ROW, COL);
for (i=0; i<ROW; i++)
{
for (j=0; j<COL; j++)
{
scanf("%d", &a[i][j]);
}
}
for (i=0; i<ROW; i++) //查找每行最大数, 并设置每个数是鞍点的可能性
{
max = a[i][0];
for (j=1; j<COL; j++)
{
max = (max < a[i][j])a[i][j]:max;
}
for (j=0; j<COL; j++)
{
if (a[i][j] == max)//若是最大数,则鞍点可能性设为1,否则为0
flag[i][j] = 1;
else
flag[i][j] = 0;
}
}
for (j=0; j<COL; j++) //查找每列最小数,并设置每个数是鞍点的可能性
{
min = a[0][j];
for (i=1; i<ROW; i++)
{
min = (min > a[i][j])a[i][j]:min;
}
for (i=0; i<ROW; i++)
{
if (a[i][j] == min)//若是最小数,则鞍点可能性增加1
{
flag[i][j]++;
count++;
}
}
}
printf("鞍点个数为:%d \n", count);
for (i=0; i<ROW; i++) //输出鞍点信息
{
for (j=0; j<COL; j++)
{
if (flag[i][j] == 2)
printf("%d, (%d行%d列)\n", a[i][j], i, j);
}
}
return;
}
public class Question {
public Question() {
}
public static void main(String[] agrs ) {
int[][] arr=new int[][]{ {2,3,9,6},{5,6,7,2},{1,2,8,4} };
int i,j,k,t,col;
for(i=0;i<arrlength;i++) {
for(j=1,k=j+1;k<arr[i]length;k++) {
if(arr[i][j]<arr[i][k]) {
j=k;
}
}
for(t=1,col=t+1;col<arrlength;col++) {
if(arr[t][j]>arr[col][j]) {
t=col;
}
}
if(i==t) {
Systemoutprintln(i+" "+j);
break;
}
}
if(i>=arrlength) {
Systemoutprintln("No");
}
}
}
直接写了,你有心可以改进!
(1)编写一个应用程序,要求将一个浮点数强制转化成整型后输出;
解答:
import javautilScanner;
public class Answer1 {
public static void main(String []args)
{
//(1) 强制转换
Scanner reader=new Scanner(Systemin);
Systemoutprint("请输入一个浮点数: ");
float f=readernextFloat();
//强制转换成整数
int d=(int)f;
Systemoutprintf("强制转换后等于: %d", d);
}
}
2)请计算出3~1000范围内最大的10个素数,放入数组中,并计算出其累加和;
解答:
import javautilScanner;
public class Answer2 {
public static void main(String []args)
{
//求1000以内的所有素数
int[] ss=new int[10];
int sum=0;
int n=1000;
int t=2;
int m;
int count=0;//记录素数的个数
for(m=n-1;m>2;m--)
{
while(m%t!=0)
{
if(t<m/2)
t++;
else
{
if(count+1<=10)
{
ss[count]=m;
}
if(count%10==0)
Systemoutprintln();
Systemoutprintf("%5d ", m);
count++;
break;
}
}
t=2;
}
Systemoutprintf("%5d\n\n",2);
Systemoutprintln("1000以内的素数有"+(count+1)+"个");
Systemoutprintln("最大的十个素数为");
for(int i:ss)
{
Systemoutprint(i+" ");
sum+=i;
}
Systemoutprintln("\n最大的十个素数之和为"+sum);
}
}
(3)水仙花数是3位数,它的各位数的立方和等于这个3位数本身,例如:371=3^3+7^3+1^3,371就是一个水仙花数。找出所有水仙花数;
解答:
import javautilScanner;
public class Answer3 {
public static void main(String []args)
{
//水仙花数
int ge;
int shi;
int bai;
int sum=0;
for(bai=1;bai<10;bai++)
for(shi=0;shi<10;shi++)
for(ge=0;ge<10;ge++)
if(bai100+shi10+ge==(int)
(Mathpow(bai, 3)+Mathpow(shi, 3)+Mathpow(ge, 3)))
{
Systemoutprintln(bai100+shi10+ge);
sum++;
}
Systemoutprintln("共有"+sum+"个");
}
}
4)找出一个二维数组的鞍点,即该位置上的元素在该行最大、在列上最小(也可能没有鞍点)。
解答:
import javautilScanner;
public class Answer4 {
public static void main(String []args)
{
int n=0;
int m=0;
Scanner reader=new Scanner(Systemin);
Systemoutprintln("请输入数组的行数:");
m=readernextInt();
Systemoutprintln("请输入数组的列数:");
n=readernextInt();
int[][] array=new int[m][n];
Systemoutprintln("请输入数组的元素:");
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
array[i][j]=readernextInt();
}
int[] maxArray=new int[m];
int[] minArray=new int[n];
int max=0,min=0;
for(int i=0;i<m;i++)
{
max=array[i][0];
for(int j=0;j<n;j++)
{
if(array[i][j]>max)
{
max=array[i][j];
maxArray[i]=j;
}
}
}
for(int j=0;j<n;j++)
{
min=array[0][j];
for(int i=0;i<m;i++)
{
if(array[i][j]<min)
{
min=array[i][j];
minArray[j]=i;
}
}
}
for(int i=0;i<m;i++)
{
if(array[i][maxArray[i]]==array[minArray[maxArray[i]]][maxArray[i]])
{
Systemoutprintln("鞍点是:");
Systemoutprintln("["+i+","+maxArray[i]+"]"+":"+array[i][maxArray[i]]);
}
}
}
}
/JAVA 设计一个5X5的二维数值型数组,
查找该数组是否存在鞍点,如果有,打印以及该元素所处的位置
鞍点就是该位置上的元素在该行最大并且在该列上最小/
public class Array0 {
public static void main(String[] args){
int[][] arr=new int[5][5];//定义一个55的二维数组
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
arr[i][j]=(int)(Mathrandom()100);//给数组中的元素随机赋值
}
}
Systemoutprintln("二维数组中的元素:");
for(int i=0;i<arrlength;i++){
for(int j=0;j<arrlength;j++){
Systemoutprint(arr[i][j]+" ");//打印
}
Systemoutprintln();
}
for(int a=0;a<5;a++){//找出第a行上的最大值,并找出最大值所在的列
int max=arr[a][0];
int x=0;
for(int b=0;b<5;b++)
{if(arr[a][b]>max){<br> max=arr[a][b];<br> x=b;<br> }
}
for(int c=0;c<5;c++){//判断第a行的最大值是不是所在的列的最小值
if(max>arr[c][x]){break;}//如果没有鞍点不输出,有鞍点则输出鞍点
if(c<4) {continue;}
Systemoutprintln("鞍点为:arr["+a+"]["+x+"]");
}
}
}
} 由于数组是随机赋值,所以,有时候是没有鞍点,只输出数组,多运行几次直到出现鞍点就可以了
package comnjtytest;
/
马鞍数
@author Administrator
/
public class MAS {
/
@param args
/
public static void main(String[] args) {
//定义二维数组
int arrays[][] = {
{5,6,3,8,9},
{4,5,6,7,8},
{3,4,5,2,1},
{2,3,4,9,0},
{1,2,5,4,8}
};
boolean flag = true; //用于标记是否是马鞍数
for(int i = 0; i< 5; i++){
int tempM = arrays[i][0]; //首先将第一行第一列数假设就是马鞍数
int tempi = 0; //用于行判断
int tempj = 0; //用于存储每行最小数所在的列数
for(int j = 0; j< 5; j++){
if(arrays[i][j] < tempM){//找到行中最小的数
tempM = arrays[i][j];
tempj = j; //保存最小数的列数
}
}
while(tempi < 5){
if(tempM <arrays[tempi][tempj]){//判断是否是列中最大的数
flag = false; //不符合条件则将标记置为false
}
tempi++;
}
if(flag){
Systemoutprintln("马鞍数是 第"+(i+1)+"行第"+(tempj+1)+"列的数:"+tempM);
}
}
if(!flag){
Systemoutprintln("该组数中不存在马鞍数!");
}
}
}
以上就是关于编写程序,找出二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。要求使用C语言,不是C++全部的内容,包括:编写程序,找出二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。要求使用C语言,不是C++、这是一道java数据结构的问题!要能运行出来的,最好带点儿详细的解释或注释什么的,感谢!!、java编程很简单的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)