首页 > 其他分享 >杨氏矩阵(C语言)

杨氏矩阵(C语言)

时间:2024-04-04 23:29:05浏览次数:21  
标签:count arr int 矩阵 C语言 杨氏 printf col

文章目录

问题

有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

要求:时间复杂度小于O(N);

技术名词解释

杨氏矩阵: 矩阵的每行从左到右是递增的,每列从上到下是递增的。是对组合表示理论和舒伯特演算很有用的工具。它提供了一种方便的方式来描述对称和一般线性群的群表示,并研究它们的性质。杨氏矩阵是剑桥大学大学数学家阿尔弗雷德·扬在1900年提出。然后在1903年,它被用于格奥尔格·弗罗贝纽斯的对称群研究中。它的理论得益于许多数学家的贡献得到进一步发展,包括珀西·麦克马洪,W.V.D.霍奇,G.deB.罗宾逊,吉安·卡咯罗塔,阿兰拉斯克斯,马塞尔·保罗斯库森博格和理查德·P·史丹利。


思路

定义一个二维数组arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}。


关键代码

1、如果第一次输入不相等,则通过while循环找到所在下标,条件肯定包括a!=arr[i][col-1]、i<row和col>=0。

    int a = 0;
    printf("请输入你想找的数:");
    scanf("%d", &a);
    int i = 0, count = 1;
    while (a != arr[i][col - 1] && i < row && col >= 0)
    {
        if (a < arr[i][col - 1])
        {
            col--;
            count++;
        }
        else
        {
            count++;
            i++;
        }
    }


2、第一次相等或者通过while循环之后通过if实现下标、比较次数和是否找到的打印。

    if (a == arr[i][col - 1])
    {
        printf("下标为(%d,%d)\n", i, col - 1);
        printf("比较了%d次\n", count);
        return 1;
    }
    else
    {
        printf("比较了%d次\n", count);
        return 0;
    }

运行代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>

int Young_tableau(int arr[4][4], int row, int col)
{
	printf("****************\n");
	Sleep(100);
	printf("****寻找开始****\n");
	Sleep(100);
	printf("****************\n");
	Sleep(100);

	int a = 0;
	printf("请输入你想找的数:");
	scanf("%d", &a);
	int i = 0, count = 1;
	while (a != arr[i][col - 1] && i < row && col >= 0)
	{
		if (a < arr[i][col - 1])
		{
			col--;
			count++;
		}
		else
		{
			count++;
			i++;
		}
	}
	if (a == arr[i][col - 1])
	{
		printf("下标为(%d,%d)\n", i, col - 1);
		printf("比较了%d次\n", count);
		return 1;
	}
	else
	{
		printf("比较了%d次\n", count);
		return 0;
	}
}
int main()
{
	int arr[4][4] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
	int row = 4, col = 4;
	int ret=Young_tableau(arr, row, col);
	if (ret == 1)
	{
		printf("找到了\n");
	}
	else
	{
		printf("找不到了\n");
	}
	return 0;
}

标签:count,arr,int,矩阵,C语言,杨氏,printf,col
From: https://blog.csdn.net/2301_80975833/article/details/137382118

相关文章

  • C语言—用EaxyX绘制实时钟表
     代码效果如图#undefUNICODE#undef_UNICODE#include<graphics.h>#include<conio.h>#include<math.h>#definewidth640#definehigh480#definePI3.14159intmain(){ initgraph(width,high); intcenter_x,center_y; center_x=width/2;......
  • C语言经典例题(17) --- 最小公倍数、单词倒置、你是天才吗?、完美成绩、判断整数的奇偶
    1.最小公倍数正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数,设计一个算法,求输入A和B的最小公倍数。输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。输入:57输出:35#include<stdio.h>intmain(){inta=0;intb=0;int......
  • C语言经典例题(18) --- 判断字母、三角形判断、衡量人体胖瘦程度、翻转金字塔图案、平
    1.判断是不是字母题目描述:KK想判断输入的字符是不是字母,请帮他编程实现。输入描述:多组输入,每一行输入一个字符。输出描述:针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。输入:A6输出:Aisanalphabet.6isnotanalphabet......
  • 16.C语言错题整理
    一些C语言错题//求n的阶乘intsum=1;intn;printf("请输入n的值:");scanf("%d",&n);for(intj=1;j<n+1;++j){sum*=j;}printf("%d\n",sum);inthee=0;intb=1;for(......
  • DFS 全排列问题 C语言代码
    深度优先搜索(DFS)是一种遍历算法,尽可能深地向子树中的结点搜索,直到达到一定的深度,再回溯到上层的结点,继续搜索未被访问的结点。全排列问题给定4个数1234,求他们所有可能的排列结果。代码#include<stdio.h>voiddfs(intx);inti;inta[4];intresult[4];/......
  • C语言 | Leetcode C语言题解之第8题字符串转换整数atoi
    题目:题解:intmyAtoi(char*s){inti=0;intout=0;intpol=1;intlen=strlen(s);if(len==0)return0;while(s[i]=='')i++;//删除空格if(s[i]=='-'){//判断正负pol=-1;i++;}else......
  • 图的存储-邻接矩阵
    1.有向图和无向图的邻接矩阵 设G(V,E)是一个具有n个顶点的图,则图的邻接矩阵是一个n×n的二维数组,用Edge[n][n]表示,它的定义为:下面的图给出了无向图G1(V,E)及其邻接矩阵表示。在图中,为了表示顶点信息,特意将顶点的标号用字母A、B、C、D、E和F表示,各顶点的信息......
  • 矩阵乘法与GPU并行
    矩阵乘法是一个常见的计算密集型任务,特别适合于GPU(图形处理单元)并行计算。GPU通过执行成千上万的小型、简单的操作(如浮点运算),可以显著加速矩阵乘法等并行任务。矩阵乘法在GPU的执行步骤下面是矩阵乘法在GPU上并行优化的一个概述,以及一个简单示例的执行步骤。1、分割任务G......
  • c语言中关于字符数组赋值问题
    一维数组代码#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=1010;charstr[N];charst[N];chars1[N];chars2[N];/*abcdeabcdeabcdeabcde*/intmain(){ scanf("%s",&str+1); ......
  • c语言:模拟字符串拷贝功能(strcpy),面试题
    面试题:优化中的优化(10分满分)字符串拷贝:是将一个字符串的内容复制到另一个字符串中的操作。运用函数模拟字符串拷贝:(5分)模拟字符串拷贝#include<stdio.h>voidmy_strcpy(char*dest,char*str){ while(*str!='\0') { *dest=*str; str++; dest++; } *dest......