求问一道c语言编程题,在二维数组中进行查找 输出下标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求问一道c语言编程题,在二维数组中进行查找 输出下标相关的知识,希望对你有一定的参考价值。

#include <stdio.h>int main() int a[3][5]; int i,j,n; for(i=0;i<3;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); scanf("%d",&n); for(i=0;i<3;i++) for(j=0;j<5;j++) if(a[i][j]==n) break; printf("%d %d",i,j); 这样输出是很乱的数字

C语言程序:
#include <stdio.h>
#include <string.h>

#define ROW 5
#define MAX 100

void main()

/* 存储题目 */
char question[ROW][MAX] =
"以下表示C语言中短整型的是:",
"以下不属于整数类型的是:",
"执行'int x=1; int y=x++;'后y的值是:",
"以下说法错误的是:",
"执行'int i; for(i=0;i<10;i++); printf(\"%d\",i);'后的运行结果是:";

/* 存储4个答案 */
char *answer[ROW][4] =
"A. int", "B. short", "C. long", "D. small",
"A. int", "B. short", "C. long", "D. small",
"A. 1", "B. 2", "C. -1", "D. 0",
"A. main函数是C程序的入口", "B. 一个C程序可以包含多个函数", "C. C程序对大小写不敏感", "D. 数组一经定义,它的大小不容改变",
"A. 11", "B. 0123456789", "C. 0", "D. 陷入死循环";

/* 存储正确答案 */
char key[ROW] = 'B','D','A','C','A';
char choice;
int score = 0;
int n, col;

printf("C语言程序设计测试\n");
printf("--------------------------------------------------------\n");
for(n=0; n<ROW; n++)

printf("%d. %s\n", n+1, question[n]);
for(col=0; col<4; col++)

printf("%s\n", answer[n][col]);

printf("您的答案:");
scanf("%c", &choice);
getchar();
if(choice == key[n] || (choice - 32) == key[n])

score += 20;

printf("\n");


printf("测试结束\n");
printf("您的最终得分:%d\n", score);
参考技术A 按照逻辑,printf("%d %d", i, j)应该是找到的下标,那就应该在if语句中包含,可是原来的程序没有花括号,只执行了break,符合的数字就跳过了,反而打印的是不符合的数字。所以加上花括号把两条语句包含在内。
而且在一开始再声明一个int 变量int isfound = 0;在if语句中设置isfound = 1,在程序最后判断
if(isfound == 0)
printf("没有找到").这样就完整了。

剑指Offer编程题(Java实现)——二维数组中的查找

题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路

根据排序特点,该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边。

因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间,当前元素的查找区间为左下角的所有元素。

时间复杂度 O(M + N),空间复杂度 O(1)。其中 M 为行数,N 为 列数。

答案

public class Solution 
    public boolean Find(int target, int [][] array) 
        if (array == null || array.length == 0 || array[0].length == 0)
            return false;
        int x = 0;
        int y = array[0].length - 1;
        
        while(x < array.length && y >= 0)
            if(array[x][y] == target)
                return true;
            else if(array[x][y] > target)
                y--;
            else
                x++;
            
        
        return false;
    

运行时间:170ms

占用内存:16512k

【注意】

判断array是否为空语句一定要加上,一开始没加怎么都通过不了,也算是考验代码健壮性。

 

以上是关于求问一道c语言编程题,在二维数组中进行查找 输出下标的主要内容,如果未能解决你的问题,请参考以下文章

c语言查找二维数组的鞍点 新生求助大佬

c语言中怎样实现对二维数组元素进行赋值并输出。

[编程题]二维数组中的查找

剑指Offer编程题(Java实现)——二维数组中的查找

面试题3-二维数组中的查找

一道编程题:求逆序对的个数