zoukankan      html  css  js  c++  java
  • C#写鞍点问题

    题目:

    编写程序,找一找一个二维数组中的鞍点(即该位置上的元素值在行中最大,在列上最小。有可能数组没有鞍点)。

    要求
    * 二维数组的大小、数组元素的值在运行时输入;
    * 程序有友好的提示信息

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _sy1_5
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("计算矩阵鞍点(行最大,列最小)");
                while (true)
                {
                    Console.WriteLine("任意键继续,0退出");
                    string select = Console.ReadLine();
                    if (select == "0")
                    {
                        Console.WriteLine("已退出!");
                        break;
                    }
                    else
                    {
                        int[,] arr = new int[100, 100];//该数组
                        int m, n;
                        Console.Write("请输入二维数组的行数(小与100):");
                        m = int.Parse(Console.ReadLine());//矩阵行数
                        Console.Write("请输入二维数组的列数(小与100):");
                        n = int.Parse(Console.ReadLine());//矩阵列数
                        int i, j;
                        //输入该矩阵
                        Console.WriteLine("请输入" + m + "x" + n + "的矩阵");
                        for (i = 0; i < m; i++)
                        {
                            for (j = 0; j < n; j++)
                            {
                                arr[i, j] = int.Parse(Console.ReadLine());
                                //Convert.ToInt32(Console.Read());
                            }
                        }
                        //输出打印该矩阵
    
                        for (i = 0; i < m; i++)
                        {
                            if (i == m / 2)
                            {
                                Console.Write("A = ");
                            }
                            for (j = 0; j < n; j++)
                            {
                                if (i == m / 2)
                                {
                                    Console.Write(arr[i, j] + "    ");
                                }
                                else
                                {
                                    Console.Write("    " + arr[i, j]);
                                }
                            }
                            Console.WriteLine();
                        }
    
                        int row_max;//先找到该行的最大值
                        int[] an_point = new int[100];//存储矩阵中所有鞍点
                        int count = 0;//鞍点个数
                        int temp1 = 0, temp2 = 0;//暂时保存该行最大值的位置
                        int[] x = new int[100];//保存鞍点的横坐标
                        int[] y = new int[100];//保存鞍点的纵坐标
                        bool flag = false;//判断是否是鞍点
    
                        for (i = 0; i < m; i++)
                        {
                            row_max = arr[i, 0];//令某行最大的等于该行第一个数
                            for (j = 0; j < n; j++)
                            {
                                if (row_max < arr[i, j])
                                {
                                    row_max = arr[i, j];//找到该行最大值   
                                    //记录该数的位置
                                    temp1 = i;
                                    temp2 = j;
                                }
                            }
                            //找到最大值后判断该值在该列是否是最小值
                            for (int k = 0; k < m; k++)
                            {
                                if ((arr[k, temp2] < row_max) || (arr[k, temp2] == row_max && k != temp1))//不是最小值
                                {
                                    flag = false;
                                    break;
                                }
                                else//是最小值
                                {
                                    flag = true;
                                }
                            }
                            //是鞍点
                            if (flag == true)
                            {
                                count++;//鞍点个数加一
                                an_point[count] = arr[temp1, temp2];//保存鞍点
                                //保存鞍点位置
                                x[count] = temp1 + 1;
                                y[count] = temp2 + 1;
                            }
                        }
                        if (count == 0)
                        {
                            Console.WriteLine("该矩阵无鞍点!");
                        }
                        else
                        {
                            Console.WriteLine("该矩阵有" + count + "个鞍点");
                            Console.WriteLine("分别是:");
                            for (int p = 1; p <= count; p++)
                            {
                                Console.Write("A[" + x[p] + "," + y[p] + "]=");
                                Console.WriteLine(an_point[p]);
                            }
                        }
                    }
                }//结束
            }
        }
    }
    

      结果显示:

    实验总结:首先熟悉了对C#程序定义二维数组的方法,其次因先找出该行最大值并记录位置,在它的列上判断是否是列中最小值,由于要记录鞍点个数并输出,所以需要对每个鞍点都进行记录并保存位置。

  • 相关阅读:
    BackgroundWorker
    Devexpress 10
    Winform常用控件的使用(一)
    Composite UI Application Block(CAB)
    HTML CSS简单总结
    C# JSON字符串序列化与反序列化常见模型举例
    HTML 调用iscroll.js主要事项
    HTML5 Socket通信
    Webservice加上SoapHeader验证方式
    动态调用Webservice 支持Soapheader身份验证(转)
  • 原文地址:https://www.cnblogs.com/ttzz/p/7703797.html
Copyright © 2011-2022 走看看